Интервал между дочерними элементами управления в WPF Grid
У меня есть набор пар "ключ/значение", которые я хочу отобразить в окне WPF. Я использую сетку, чтобы выложить их так:
<Grid Margin="4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Label Grid.Row="0" Grid.Column="0">Code</Label>
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Code}"/>
<Label Grid.Row="1" Grid.Column="0">Name</Label>
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Name}"/>
</Grid>
Однако, когда я показываю это, текстовые поля сжимаются вверху и нижней границей, касаясь TextBox выше/ниже. Каков наилучший способ добавить вертикальное пространство к строкам в этом макете?
Ответы
Ответ 1
Самый простой способ - установить маржу для отдельных элементов управления. Устанавливать его на TextBoxes должно быть достаточно, потому что, как только они будут разнесены, ярлыки будут устанавливаться вертикально в центре каждой строки и в любом случае иметь много места.
Вы можете установить его один раз с помощью стиля:
<Grid Margin="4">
<Grid.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Margin" Value="0,0,0,4" />
</Style>
</Grid.Resources>
...
</Grid>
Это добавит 4-пиксельный край к нижней части любого текстового поля внутри вашей сетки.
Ответ 2
Еще один приятный подход можно увидеть здесь:
http://blogs.microsoft.co.il/blogs/eladkatz/archive/2011/05/29/what-is-the-easiest-way-to-set-spacing-between-items-in-stackpanel.aspx
Он показывает, как создать присоединенное поведение, так что синтаксис, подобный этому, будет работать:
<StackPanel local:MarginSetter.Margin="5">
<TextBox Text="hello" />
<Button Content="hello" />
<Button Content="hello" />
</StackPanel>
Это самый простой и быстрый способ установить Margin для нескольких дочерних элементов панели, даже если они не одного типа. (I.e. Buttons, TextBoxes, ComboBoxes и т.д.)
Ответ 3
Как настроить TextBox VerticalAlignment в Center?
<Grid Margin="4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Label Grid.Row="0" Grid.Column="0">Code</Label>
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Code}" VerticalAlignment="Center"/>
<Label Grid.Row="1" Grid.Column="0">Name</Label>
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Name}" VerticalAlignment="Center"/>
</Grid>