【发布时间】:2018-09-25 04:48:58
【问题描述】:
我有一个 Xml 文件,它告诉我必须添加到表单中的控件,但此 Xml 动态更改,我需要更新表单。 目前,我可以读取 XML 文件,但我不知道是否可以根据它自动创建表单?
【问题讨论】:
-
你能把你的xml文件的样本放上来
我有一个 Xml 文件,它告诉我必须添加到表单中的控件,但此 Xml 动态更改,我需要更新表单。 目前,我可以读取 XML 文件,但我不知道是否可以根据它自动创建表单?
【问题讨论】:
是的,有可能。
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);
现在,您要使用两种方法中的哪一种真正取决于您。
让-路易斯
【讨论】:
您可以通过 wpf 中的代码轻松添加控件,您可以follow this article。另一件值得注意的事情是,XAML 是 XML 的一种形式,因此您可以将 XAML 保存到 XML 文件中,这样您就不需要在代码中添加控件,但这取决于您的应用程序的复杂性。
【讨论】:
我对 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);
【讨论】:
通过 Children.Add 方法添加控件是我找到的最快的方法,例如
this.Grid.Add(new TextBox() { Text = "Babau" });
【讨论】: