我有一个带有两个标签的网格。
<Grid>
<Label Grid.Row="0" Content="Hello" Height="20"></Label>
<Label Grid.Row="1" Content="World" Height="20"></Label>
</Grid>
我知道我可以为每一行添加,但如果我有 100 行,我需要添加 100 行定义。有没有办法全局设置行定义,以便所有行/列都继承它们的属性?
我有一个带有两个标签的网格。
<Grid>
<Label Grid.Row="0" Content="Hello" Height="20"></Label>
<Label Grid.Row="1" Content="World" Height="20"></Label>
</Grid>
我知道我可以为每一行添加,但如果我有 100 行,我需要添加 100 行定义。有没有办法全局设置行定义,以便所有行/列都继承它们的属性?
你总是可以继承Grid
. 在控件加载时手动设置每个子项的Grid.Row
属性并添加行定义。您可以向控件添加一个属性以指定每行的统一高度。例如:
public class UniformGrid : Grid
{
public double? UniformHeight { get; set; }
public UniformGrid()
{
Loaded += UniformGrid_Loaded;
}
void UniformGrid_Loaded(object sender, RoutedEventArgs e)
{
int i=0;
foreach (FrameworkElement child in Children)
{
var rowHeight = UniformHeight.HasValue ? new GridLength(UniformHeight.Value) : GridLength.Auto;
RowDefinitions.Add(new RowDefinition { Height = rowHeight });
Grid.SetRow(child, i++);
}
}
}
用法:
<my:UniformGrid UniformHeight="20">
<Label Content="Hello" />
<Label Content="World" />
</my:UniformGrid>
(虽然,正如一些评论所指出的,上面基本上只是一个 StackPanel,只是速度较慢。)