Как я могу выровнять 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 было увеличено или уменьшено пользователем.
Ответы
Ответ 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>