如何在运行时将 wpf 控件添加到特定的网格行和单元格?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/7127125/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to add wpf control to particular grid row and cell during runtime?
提问by Ultratrunks
I have the following grid in my WPF "Window" (yes the class Window);
我的 WPF“窗口”中有以下网格(是类窗口);
<Grid Name="RequiredGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="70" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
</Grid>
Depending on whats passed into the window, I want to add items into this grid one row at a time. Namely, I want to add a Label in the left column and a TextBox in the right column. I believe I know how to add new rows for holding new data by doing the following in the code behind:
根据传入窗口的内容,我想一次向此网格中添加一行。即,我想在左栏中添加一个 Label,在右栏中添加一个 TextBox。我相信我知道如何通过在后面的代码中执行以下操作来添加新行以保存新数据:
RequiredGrid.RowDefinitions.Add(new RowDefinition());
Problem is, after I've created my Label and my TextBox.
问题是,在我创建了标签和文本框之后。
Label AttrLabel = new Label();
TextBox AttrTextBox = new TextBox();
I don't really know how to get it into the Window so it gets displayed. I've seen some threads that say, do something like this:
我真的不知道如何将它放入 Window 以便显示出来。我看到一些线程说,做这样的事情:
this.Controls.Add(AttrLabel);
this.Controls.Add(AttrTextBox);
There are two problems with this. 1) My Window class doesn't have this "Controls" property or whatever. And 2) This wouldn't help me specify the row and column of each UI item.
这有两个问题。1) 我的 Window 类没有这个“控件”属性或其他什么。和 2) 这不会帮助我指定每个 UI 项目的行和列。
Now in XAML, Id be easy to specify the row and column with something like this:
现在在 XAML 中,我可以很容易地使用以下内容指定行和列:
<Label Grid.Column="0" Grid.Row="0"/>
This defeats the "dynamic-ness" of my intent here though. Does anyone know how I can get my dynamicaly created UI elements to display in my Window and specify which row and column it will show up in the grid.
不过,这打败了我的意图的“动态性”。有谁知道如何让我动态创建的 UI 元素显示在我的窗口中,并指定它将显示在网格中的行和列。
回答by Chris Shain
The Grid.Row and Grid.Column properties are Attached Properties, and as such are not set like normal .net properties. The right way to set them from code is:
Grid.Row 和 Grid.Column 属性是Attached Properties,因此不像普通的 .net 属性那样设置。从代码设置它们的正确方法是:
Grid.SetRow(someLabel, 0);
Grid.SetColumn(someLabel, 0);
You should be able to do this before or after adding them to the Grid object's Children collection, but setting them before adding the control should prevent any possible flickering.
您应该能够在将它们添加到 Grid 对象的 Children 集合之前或之后执行此操作,但是在添加控件之前设置它们应该可以防止任何可能的闪烁。
回答by Alex Curtis
- Create the grid (
<yourGrid>
) and the Row Definitions like you have done. Create The Control (
<yourcontrol>
). Then Set The ColumnSpan and Row for the Grid:Grid.SetColumnSpan(<yourControl>, 3); Grid.SetRow(<yourControl>, 0);
Then add your control to the grid you have created
<yourGrid>.Children.Add(<yourControl>);
<yourGrid>
像您一样创建网格 ( ) 和行定义。创建控件 (
<yourcontrol>
)。然后为网格设置 ColumnSpan 和 Row:Grid.SetColumnSpan(<yourControl>, 3); Grid.SetRow(<yourControl>, 0);
然后将您的控件添加到您创建的网格中
<yourGrid>.Children.Add(<yourControl>);