WPF: добавление элементов управления из кода
Я привык к Windows Forms, но не к WPF. Поскольку я думаю, что WPF имеет большие преимущества, я пытаюсь использовать его в своих новых проектах.
Моя проблема следующая:
У меня есть Xml файл, который подскажет мне элементы управления, которые я должен добавить в форму, но этот Xml может измениться, поэтому мне нужно:
- Прочитайте XML файл (исправлено, без проблем)
- Создайте пользовательскую форму WPF с данными, которые я прочитал.
Возможно ли это? Или я должен использовать Windows Forms?
Ответы
Ответ 1
Да Возможно.
WPF предлагает несколько способов создания элементов управления либо в Xaml, либо в коде.
Для вашего случая, если вам нужно динамически создавать свои элементы управления, вам придется создавать их в коде. Вы можете либо создать свой контроль напрямую, используя их конструкторы, как в:
// Create a button.
Button myButton= new Button();
// Set properties.
myButton.Content = "Click Me!";
// Add created button to a previously created container.
myStackPanel.Children.Add(myButton);
Или вы могли бы создать свои элементы управления в виде строки, содержащей xaml, и использовать XamlReader для синтаксического анализа строки и создания требуемого элемента управления:
// Create a stringBuilder
StringBuilder sb = new StringBuilder();
// use xaml to declare a button as string containing xaml
sb.Append(@"<Button xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' ");
sb.Append(@"Content='Click Me!' />");
// Create a button using a XamlReader
Button myButton = (Button)XamlReader.Parse(sb.ToString());
// Add created button to previously created container.
stackPanel.Children.Add(myButton);
Теперь, когда один из двух методов, которые вы хотите использовать, действительно зависит от вас.
Жан-Луи
Ответ 2
Вы можете легко добавить элементы управления через код в wpf, следовать этой статье. Еще одна вещь, которую стоит отметить, это то, что XAML представляет собой форму XML, поэтому вы можете сохранить свой XAML в XML файл, таким образом вам не нужно будет добавлять элементы управления в код, однако это зависит от сложности вашего приложения.
Ответ 3
Я новичок в Xaml, но добавлю ответ Jean-Louis, если вы не хотите добавлять пространства имен к каждой строке элемента, тогда вы можете сделать что-то вроде этого, используя пространство имен System.Windows.Markup:
ParserContext context = new ParserContext();
context.XmlnsDictionary.Add("", "http://schemas.microsoft.com/winfx/2006/xaml/presentation");
context.XmlnsDictionary.Add("x", "http://schemas.microsoft.com/winfx/2006/xaml");
string xaml = String.Format(@"<ListBoxItem Name='Item{0}' Content='{1}' />", itemID, listItems[itemID]);
UIElement element = (UIElement)XamlReader.Parse(xaml, context);
listBoxElement.Items.Add(element);
Ответ 4
Добавление элементов управления через метод Children.Add - это самый быстрый способ, который я нашел, например,
this.Grid.Add(new TextBox() { Text = "Babau" });