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

Как я могу выровнять CheckBox с его содержимым?

Внешний вид WPF CheckBox смещает контрольную часть с меткой (содержанием). Проверка остается немного выше содержания, как показано ниже:

enter image description here

XAML выглядит следующим образом:

<CheckBox Content="Poorly aligned CheckBox" Margin="9"/>

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

Спасибо заранее.

РЕДАКТИРОВАТЬ: Проблема была вызвана Window FontSize, который я установил для 14. Чтобы воссоздать проблему, установите CheckBox FontSize равным 14 (или более). Моя программа просматривается на расстоянии factory рабочими, поэтому я допускаю, чтобы окно FontSize было увеличено или уменьшено пользователем.

4b9b3361

Ответ 1

Изменить - Новый ответ: (предыдущий был нехорошим)

Не лучший способ, я верю, но могу сделать работу:

<CheckBox>
    <TextBlock Text="Poorly aligned CheckBox" Margin="0,-2,0,0"/>
</CheckBox>

Использование отрицательного поля для продвижения контента вверх: enter image description here

Ответ 2

Я знаю это слишком поздно, но вот лучшее решение, не устанавливая поля. Поля должны быть установлены по-разному для разной высоты TextBlock или Checkbox.

<CheckBox VerticalAlignment="Center" VerticalContentAlignment="Center">
    <TextBlock Text="Well aligned Checkbox" VerticalAlignment="Center" />
</CheckBox>

Обновить:

Стоит проверить комментарий @nmarler ниже.

Ответ 3

Стиль по умолчанию CheckBox не похож на стиль WPF. Он идеально подходит для XP и Windows 7. Можете ли вы дать более подробное описание того, как воспроизвести эту проблему?

Две вещи, которые я могу придумать, чтобы получить смещение, которое вы видите, это либо изменение Padding, либо VerticalContentAlignment. Значение по умолчанию CheckBox для VerticalContentAlignment равно Top, а CheckBox с Content имеет Padding, установленное на "4,0,0,0". Попытайтесь изменить эти два круга и посмотреть, не имеет значения.

Вот сравнение

enter image description here

Из следующего Xaml

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <CheckBox Grid.Row="0"
              Content="Poorly aligned CheckBox" Margin="9" />
    <CheckBox Grid.Row="1"
              Content="Padding=4,4,0,0" Margin="9" Padding="4,4,0,0"/>
    <CheckBox Grid.Row="2"
              Content="Vertical Center" Margin="9"
              VerticalContentAlignment="Center"/>
    <CheckBox Grid.Row="3"
              Content="Vertical Top" Margin="9"
              VerticalContentAlignment="Top"/>
</Grid>

Ответ 4

Для этого есть простое решение без необходимости создавать текстовое поле для содержимого. Просто используйте:

<CheckBox Content="Sample of Text" VerticalContentAlignment="Center"/>

Ответ 5

Поместите пустой CheckBox и содержимое в виде отдельных элементов управления в StackPanel с горизонтальной ориентацией. Это работает с любым размером шрифта.

<StackPanel Orientation="Horizontal">
    <CheckBox VerticalAlignment="Center" />
    <TextBlock VerticalAlignment="Center" Text="Option X" />
</StackPanel />

Ответ 6

Применение отрицательных верхних дополнений отлично подходит для моего макета:

<CheckBox Content="Poorly aligned CheckBox" Padding="4,-3,0,0" Margin="9"/>

Ответ 7

Мои флажки выровнены в порядке, поэтому я задаюсь вопросом, что по-вашему. Единственное очевидное отличие состоит в том, что вы используете более крупный шрифт, чем я, что напоминает мне о следующем вопросе:

Стиль WPF CheckBox с помощью TextWrapping

Ваша проблема может заключаться в том, что если содержимое является текстовым блоком, флажок является оправданным, что может показаться странным при увеличении размера шрифта. Так что я предполагаю, попробуйте использовать AccessText в качестве содержимого CheckBox:

<CheckBox Margin="9"><AccessText>Better aligned CheckBox?</AccessText></CheckBox>