Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.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# 如何以编程方式创建带有控件的xaml面板_C#_Wpf_C# 4.0 - Fatal编程技术网

C# 如何以编程方式创建带有控件的xaml面板

C# 如何以编程方式创建带有控件的xaml面板,c#,wpf,c#-4.0,C#,Wpf,C# 4.0,是否可以通过编程在当前文档中创建包含重复元素的新面板? 例如,当窗口加载时,我有一个带有三个文本字段Fname01、Lname01和DOB01的网格(一行),我希望有一个按钮,当单击该按钮时,会将一个新行附加到带有三个新字段(Fname02、Lname02和DOB02)的网格中。每次单击按钮(addrow)时,都会创建一个新行。我还想了解如何在xaml中识别这些字段,这将允许我对创建的字段进行数据绑定或编程引用,以便将值插入数据库等 提前感谢您,您应该使用列表框(或列表视图)或数据网格。普通网格

是否可以通过编程在当前文档中创建包含重复元素的新面板? 例如,当窗口加载时,我有一个带有三个文本字段Fname01、Lname01和DOB01的网格(一行),我希望有一个按钮,当单击该按钮时,会将一个新行附加到带有三个新字段(Fname02、Lname02和DOB02)的网格中。每次单击按钮(addrow)时,都会创建一个新行。我还想了解如何在xaml中识别这些字段,这将允许我对创建的字段进行数据绑定或编程引用,以便将值插入数据库等

提前感谢您,

您应该使用列表框(或列表视图)或数据网格。普通网格仅用于布局,不用于管理数据集合

如果使用列表框,则可以为数据对象创建数据模板,列表框将使用该数据模板显示对象。在该数据模板中,创建3列网格以容纳编辑控件,并将这些控件绑定到数据对象的属性。有关数据模板和数据绑定的示例和详细信息,请在web上搜索。有很多例子。

您应该使用列表框(或列表视图)或数据网格。普通网格仅用于布局,不用于管理数据集合


如果使用列表框,则可以为数据对象创建数据模板,列表框将使用该数据模板显示对象。在该数据模板中,创建3列网格以容纳编辑控件,并将这些控件绑定到数据对象的属性。有关数据模板和数据绑定的示例和详细信息,请在web上搜索。有很多例子。

是的。要创建新行,请调用Grid.RowDefinitions.Add:

myGrid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Auto) });
然后,要创建要放入网格的元素,请新建这些元素,设置行和列附着的属性,然后将它们添加到网格中。子集合:

int rowIndex = myGrid.Rows.Count - 1;  // or whatever
TextBox fname = new TextBox();
Grid.SetRow(fname, rowIndex);
Grid.SetColumn(fname, 0);
myGrid.Children.Add(fname);
现在,您可以通过变量以编程方式引用文本框:

fname.Text = "I'm a text box";
或在其上设置绑定:

fname.SetBinding(TextProperty, new Binding { Source = mySource, Path = new PropertyPath("FirstName") });


编辑:正如Benny在回答中所说,如果您想显示一组数据,那么ItemsControl肯定是一种比以编程方式添加到布局网格更好的方法。不过,我会留下答案,因为它可能仍然与非项目列表场景相关。

是。要创建新行,请调用Grid.RowDefinitions.Add:

myGrid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Auto) });
然后,要创建要放入网格的元素,请新建这些元素,设置行和列附着的属性,然后将它们添加到网格中。子集合:

int rowIndex = myGrid.Rows.Count - 1;  // or whatever
TextBox fname = new TextBox();
Grid.SetRow(fname, rowIndex);
Grid.SetColumn(fname, 0);
myGrid.Children.Add(fname);
现在,您可以通过变量以编程方式引用文本框:

fname.Text = "I'm a text box";
或在其上设置绑定:

fname.SetBinding(TextProperty, new Binding { Source = mySource, Path = new PropertyPath("FirstName") });


编辑:正如Benny在回答中所说,如果您想显示一组数据,那么ItemsControl肯定是一种比以编程方式添加到布局网格更好的方法。不过,我会留下答案,因为它可能仍然与非项目列表场景相关。

非常好的建议——如果这是他正在做的,那么这肯定是比手工管理网格更好的方法。谢谢。在这种情况下,听起来他想显示一组数据,尽管有时动态更改网格确实很有用。非常好的建议——如果这是他正在做的,那么这肯定是一种比手动管理网格更好的方法。谢谢。在这种情况下,听起来他想显示一组数据,尽管有时动态更改网格是很有用的。