Примечание : Обязательно ознакомьтесь с ответом Рэйчел - она продвинулась еще на один этап в общий шаблон
Прежде всего, не тратьте свое время на VerticalAlignment
или VerticalContentAlignment
(или даже ControlTemplate
). Они не будут делать то, что вы хотите или могли бы ожидать.
Как описано в MSDN a BulletDecorator
(это элемент управления, который CheckBox и RadioButton используют для рендеринга радио / кнопки проверки) автоматически установит положение значка. У вас нет дополнительного контроля над этим:
Пуля всегда выравнивается по первой строке текста, когда ребенок
Объект является текстовым объектом. Если дочерний объект не является текстовым объектом,
Пуля выравнивается по центру дочернего объекта.
Если вы не измените шаблон управления (необязательно), вы сможете разместить значок радио / галочки в верхней части только в том случае, если содержимое является текстом.
Так что если вы сделаете что-то подобное, это не будет хорошо выглядеть, потому что вы не сможете перемещать значок независимо от того, сколько VerticalAlignment
свойств вы пытаетесь установить.
<RadioButton>
<StackPanel>
<TextBlock Text="First line"/>
<TextBlock Text="Something else"/>
</StackPanel>
</RadioButton>
НО к счастью, вы можете положить почти все, что захотите, в TextBlock
, используя InlineUIContainer
. Текст (или содержимое) в первой строке будет автоматически определять положение значка. Если вы хотите что-то под первой строкой, которая не является текстом, просто используйте <Linebreak/>
, а затем <InlineUIContainer/>
Вот пример с увеличенным TextBox
, чтобы более четко показать, что происходит.
<RadioButton>
<TextBlock VerticalAlignment="Top" TextWrapping="Wrap">
<TextBlock Text="Products with <" VerticalAlignment="Center" Margin="0,0,5,0"/>
<InlineUIContainer BaselineAlignment="Center">
<TextBox FontSize="30" Width="25" Text="10" Margin="0,0,5,0"/>
</InlineUIContainer>
<TextBlock VerticalAlignment="Center" Margin="0,0,5,0">
<Run Text="days" FontWeight="Bold"/>
<Run Text="inventory" />
</TextBlock>
<LineBreak/>
<InlineUIContainer>
<StackPanel>
<CheckBox Content="Include unsold products" />
<CheckBox Content="Include something else" />
</StackPanel>
</InlineUIContainer>
</TextBlock>
</RadioButton>