Подтвердить что ты не робот

Интервал между дочерними элементами управления в 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 выше/ниже. Каков наилучший способ добавить вертикальное пространство к строкам в этом макете?

4b9b3361

Ответ 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>