Установить глобальное определение строки в сетке 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, только медленнее.)