Установить глобальное определение строки в сетке wpf

У меня есть сетка с двумя метками.

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

Я знаю, что могу добавить для каждой строки, но если у меня есть 100 строк, мне нужно добавить 100 определений строк. Есть ли способ глобально установить определения строк, чтобы все строки / столбцы наследовали их свойства?

1 ответ

Вы всегда можете подкласс 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, только медленнее.)

Другие вопросы по тегам