动态WPF表单创建方法

时间:2015-11-06 12:44:21

标签: c# wpf performance xaml user-interface

我即将从DataTable数据创建动态WPF UI表单。屏幕会相当复杂。它们将包含文本框,组框,复选框,按钮,数据网格等。其中一些是可见的,一些连接事件处理程序和类似的东西。

创建这些动态屏幕的方法是选择考虑性能影响和复杂性要求来编写和维护源代码。请注意,此代码将运行很多,因此它必须高效且快速。我正在考虑这些选择:

  1. 在代码中创建控件,将它们组装到树中,并使用树(网格控件)作为WPF表单的根元素。
  2. 1.a)从该屏幕对象树通过XAMLReader创建一个XAML,并通过WPF Form中的XAMLReader加载它。创建XAML对我来说似乎是多余的,因为我可以直接将构建的树用作WPF表单的内容。

    1. 使用XMLDocument类创建标签,obejcts及其属性。创建类似XAML的那个,然后以WPF格式加载该XAML。
    2. 谢谢,

      米甲

1 个答案:

答案 0 :(得分:1)

考虑在列表视图中显示您的表单,并为每个表单字段文本框,组框,复选框,按钮,数据网格等创建DataTemplate。

<ListBox ItemsSource="{Binding DataFormFields}"

<DataTemplate DataType="YourTextClass">
    <StackPanel>
        <TextBlock Text="{Binding LabelText}" />
        <TextBox Text="{Binding ValueText}" />
    </StackPanel>
</DataTemplate>

<DataTemplate DataType="YourCheckClass">
    <StackPanel>
        <CheckBox Content="{Binding LabelText}" 
                  IsChecked="{Binding Checked}"/>
    </StackPanel>
</DataTemplate>

有关DataTemplates的更多信息,请参阅 https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/data-templating-overview

每个数据模板应与您的一个表单字段类相关联,使用DataType属性,这将使列表框自动使用正确的DataTemplate。 有关详细信息:

https://docs.microsoft.com/en-us/dotnet/api/system.windows.datatemplate.datatype?view=netframework-4.7.2