我用RowDefinitions
和ColumnDefinition
来组织我的网格,但是永远当我想在实际的任何RowDefinition
之前添加一个新的RowDefinition
时,我需要重新组织网格。
我看到RowDefinition
和ColumnDefinition
有一个Name
属性,所以我认为可以定义网格。行与RowDefinition
名称或没有?如果是可能的,如何
<Grid>
<Grid.RowDefinitions>
<RowDefinition Name="RowDictTitle" Height="27"/>
<RowDefinition Name="RowSearchWord" Height="27"/>
<RowDefinition/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<!--Row 1-->
<TextBlock Text="Word:" VerticalAlignment="Center" Margin="10,0,0,0" Grid.Row="1"/>
<TextBox Name="Search" Grid.ColumnSpan="2" Margin="50,2,10,2"/>
<!--Row 2-->
<ListBox Name="Words" Grid.Row="2" Margin="10"/>
</Grid>
我想让下面
<TextBlock Text="Word" Grid.Row="RowSearchWord"/>
4条答案
按热度按时间bkkx9g8r1#
我也有同样的想法,这就是为什么不久前我编写了一个使用命名列和行的自定义网格类。
我把它放在Codeplex上,使用MIT许可证:Name-Based Grid project
使用该控件,您可以重写Xaml源代码,如下所示:
**优点:**您将能够按名称引用列与行(包括列范围与行范围!)-不再需要计算列或行,也不再需要在布局更改时更新列范围或行范围.
**缺点:**您需要显式声明所有列和行的名称,因为
NameBasedGrid
中根本不支持数字引用。5gfr0r5j2#
好主意,但由于Grid.Row附加属性是一个整数,这是不可能的。
请参阅http://msdn.microsoft.com/en-us/library/system.windows.controls.grid.row.aspx
但是,也可以创建一个helper,它采用网格行的名称,查找行对象并返回其行索引。
ecfdbz9o3#
我正在寻找同样的东西。找不到确切的我在寻找什么,所以我想出了我自己的解决方案使用附加属性。
我创建了一个专门的网格,附加了RowName和ColumnName属性。(在本例中,我只实现了RowName)
可以像这样在XAML中使用它。
它不会在设计工具中正确显示,但可以在执行阶段中运作。
cczfrluj4#
沿着其他答案的思路,我提出了这个附加的属性解决方案,它不需要使用自定义的
Grid
。代码很大程度上是冗余的(对于行和列),可以像这样使用:
网格帮助器.cs:
注意:这也可能在设计器中不起作用-我从来没有尝试过使用它...