Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态创建WPF组合框控件_C#_Wpf_Xml_Combobox_Xmldataprovider - Fatal编程技术网

C# 动态创建WPF组合框控件

C# 动态创建WPF组合框控件,c#,wpf,xml,combobox,xmldataprovider,C#,Wpf,Xml,Combobox,Xmldataprovider,我需要在WPF中动态创建一个DataGrid。网格应该使用动态生成的控件(组合框、文本框)填充行和列。我需要用三个coulmn和N行填充网格(行数基于XML文件中可用的XML节点)。我的WPF应用程序中有DocumentProperties.XML作为内容 <DocumentProperties> <Properties> <Property Name="DocumentName"> <Id>1</Id>

我需要在WPF中动态创建一个DataGrid。网格应该使用动态生成的控件(组合框、文本框)填充行和列。我需要用三个coulmn和N行填充网格(行数基于XML文件中可用的XML节点)。我的WPF应用程序中有DocumentProperties.XML作为内容

    <DocumentProperties>
<Properties>
  <Property Name="DocumentName">
      <Id>1</Id>
      <Name>DocumentName</Name>
      <Type>LogicalOperator</Type>
      <Language>en-US</Language>
  </Property> 
   <Property Name="TemplateUsed">
      <Id>2</Id>
      <Name>TemplateUsed</Name>
      <Type>LogicalOperator</Type>
      <Language>en-US</Language>
  </Property> 
  ....
 </Properties>
<Operators>
<Category Type="LogicalOperator">
    <Operator value="Equal"></Operator>
    <Operator value="NotEqual"></Operator>
</Category>
<Category Type="TimeOperator">
    <Operator value="Greater"></Operator>
    <Operator value="Smaller"></Operator>
    <Operator value="GreaterOrEqual"></Operator>
    <Operator value="SmallerOrEqual"></Operator>
</Category>
</DocumentProperties>

1.
文件名
逻辑运算子
恩美
2.
模板
逻辑运算子
恩美
....
在网格中,我需要在column1和Column2中创建一个组合框。column1组合将加载XML中可用的名称属性值。根据第一个组合框选择的Type元素值,我需要用Category节点中的值加载第二个组合框。根据所选属性的类型,网格中的3r列应该是带有文本框或Datepikcer的poplate。如果XML有6个属性节点,那么网格中的最大行数应该是U

我需要在WPF中动态创建一个DataGrid

您正在使用WPF datagrid控件吗?您的示例代码在任何地方都没有

如果您正在使用它,那么数据网格允许我们从XMLs指定
DataGridTextBoxColumn
DataGridComboxColumn
以及
XPath
绑定


我建议您使用它。

您能提供WPF数据网格的完整名称空间吗?它是WPFToolKit的一部分/默认情况下可用吗?几行示例代码将有助于重新执行我的任务。也欢迎任何指向教程的链接。WPF的.Net 4.0附带了一个内置的DataGrid,但是如果您使用的是早期版本的.Net framework,则需要自己的DataGrid。
documentPropertyCombo = new ComboBox[drivesCount];
                operatorCombo = new ComboBox[drivesCount];
                //Load the XML Document
                XmlDataProvider xdp = new XmlDataProvider();
                XmlDocument doc = new XmlDocument();
                doc.Load(".\\Data\\DocumentProperties.xml");
                xdp.Document = doc;
                xdp.XPath = "DocumentProperties/Properties/Property";
                xdp.Document = doc;

                drivesGrid.DataContext = xdp;
                var binding = new Binding("DocumentProperties/Properties/Property") { Source = xdp };
                binding.Mode = BindingMode.OneTime;

// Adding ComboBoxes and TextBoxes to Grid.
                for (int i = 0, j = 1; i < drivesCount; i++, j++)
                {
                    //Initialize ComboBox to show Document Property.
                    //documentPropertyCombo[i] = new ComboBox();
                    documentPropertyCombo[i] = new ComboBox(); //CreateComboBox(new Thickness(30, 101, 0, 0), i + j, 1);
                    documentPropertyCombo[i].Width = 101;
                    documentPropertyCombo[i].Height  = 30;
                    documentPropertyCombo[i].Visibility = Visibility.Visible;
                    //BindingOperations.SetBinding(myText, TextBlock.TextProperty, myBinding);
                    documentPropertyCombo[i].IsReadOnly = true;
                    documentPropertyCombo[i].DisplayMemberPath = "@Name";
                    BindingOperations.SetBinding(documentPropertyCombo[i], ComboBox.TextProperty, binding);

                    Grid.SetRow(documentPropertyCombo[i], i + j);
                    Grid.SetColumn(documentPropertyCombo[i], 1);
                    drivesGrid.Children.Add(documentPropertyCombo[i]);

 ...
}
LayoutRoot.Children.Add(drivesGrid);