我有一个简单的网格布局,只是托管多个标签和文本框。第一列中的标签,第二列中的框。
每当我添加一个新框时,我都必须在我的<RowDefinition />
块中添加一个空的<Grid.RowDefinitions>
以允许它占用一个新行。由于我没有附加到这些行的任何样式,是否有某种速记可以防止不得不这样做?
<Grid.ColumnDefinitions>
<ColumnDefinition Width="65" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
答案 0 :(得分:4)
不,没有简短的方法,但您可以编写自己的解决方案,或使用已有人的框架。
例如,CODE framework允许您定义标记,如清单6 here所示。这使用自定义面板大大简化了常见编辑表单的定义。
您可以下载source并查看其实施情况,并根据您的需求进行定制。
答案 1 :(得分:2)
您可以继承Grid并添加您需要的任何行为。
Here是AutoGrid
的一种实现,可自动为任何AutoGridEndRow
对象插入新行,并且只要Grid.Row
大于当前定义计数。
用法如下:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:WpfApplication1"
Title="Window1" Height="300" Width="300">
<my:AutoGrid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="65" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Content="Label1" />
<TextBox Grid.Column="1" />
<my:AutoGridEndRow />
<Label Content="Label1" />
<TextBox Grid.Column="1" />
</my:AutoGrid>
</Window>
答案 2 :(得分:1)
您可以使用附加属性自行创建简写语法。
我在这里创建了一个示例:https://github.com/thomasclaudiushuber/Wpf-Grid-Extensions
它允许您编写以下内容:
<Grid local:GridExtensions.Structure="*,100|200,*">
</Grid>
在幕后它创建了这个:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="100"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
</Grid>