我正在用RowDefinitions和组织我的网格ColumnDefinition,但是当我想要RowDefinition在实际任何之前添加新的时RowDefinition,我需要重新组织所有控件的Grid.Row
我看到RowDefinition并ColumnDefinition有一个Name属性,所以我认为可以定义Grid.Row的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>
Run Code Online (Sandbox Code Playgroud)
我想在下面做
<TextBlock Text="Word" Grid.Row="RowSearchWord"/>
Run Code Online (Sandbox Code Playgroud)
免责声明:这个答案是一种自我广告,受到这篇元文章所暗示的约束.它宣传了一个免费的开源项目,我(在撰写本文时)并没有赚到任何钱.唯一的好处就是我知道如果能够帮助未来的访问者提出这个问题,那么我编写所描述控件的时间就不会浪费.
我有完全相同的想法.这就是为什么,不久前,我写了一个使用命名列和行的自定义网格类.
我把它放在MIT许可下的Codeplex:基于名称的网格项目
使用该控件,您可以按如下方式重写Xaml源代码:
<nbg:NameBasedGrid>
<nbg:NameBasedGrid.RowDefinitions>
<nbg:ColumnOrRow Name="RowDictTitle" Height="27"/>
<nbg:ColumnOrRow Name="RowSearchWord" Height="27"/>
<nbg:ColumnOrRow Name="List"/>
<nbg:ColumnOrRow Height="50"/>
</nbg:NameBasedGrid.RowDefinitions>
<nbg:NameBasedGrid.ColumnDefinitions>
<nbg:ColumnOrRow Width="1*" Name="Left"/>
<nbg:ColumnOrRow Width="2*" Name="Right"/>
</nbg:NameBasedGrid.ColumnDefinitions>
<!--Row 1-->
<TextBlock Text="Word?" VerticalAlignment="Center" Margin="10,0,0,0" nbg:NameBasedGrid.Column="Left" nbg:NameBasedGrid.Row="RowSearchWord"/>
<TextBox Name="Search" nbg:NameBasedGrid.Column="Left" nbg:NameBasedGrid.Row="RowDictTitle" nbg:NameBasedGrid.ExtendToColumn="Right" Margin="50,2,10,2"/>
<!--Row 2-->
<ListBox Name="Words" nbg:NameBasedGrid.Column="Left" nbg:NameBasedGrid.Row="List" Margin="10"/>
</nbg:NameBasedGrid>
Run Code Online (Sandbox Code Playgroud)
优点:您可以按名称引用列和行(包括列和行跨度!) - 不再计算列或行,在布局更改时不再更新列或行跨度.
缺点:您需要显式声明所有列和行的名称,因为根本不支持数字引用NameBasedGrid.
好主意,但由于 Grid.Row 附加属性是一个整数,这是不可能的。
请参阅http://msdn.microsoft.com/en-us/library/system.windows.controls.grid.row.aspx
但是,可以创建一个助手来获取网格行的名称,查找行对象并返回其行索引。
| 归档时间: |
|
| 查看次数: |
4368 次 |
| 最近记录: |