0

我有一个带有两个标签的网格。

<Grid>
    <Label Grid.Row="0" Content="Hello" Height="20"></Label>
    <Label Grid.Row="1" Content="World" Height="20"></Label>
</Grid>

我知道我可以为每一行添加,但如果我有 100 行,我需要添加 100 行定义。有没有办法全局设置行定义,以便所有行/列都继承它们的属性?

4

1 回答 1

0

你总是可以继承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,只是速度较慢。)

于 2013-12-12T21:49:11.280 回答