Установка свойства VerticalAlignment для всех элементов управления - PullRequest
6 голосов
/ 31 июля 2010

Мой WPF UserControl содержит две панели стека, и каждая из них содержит метки, текстовые поля и переключатели.
Я хотел бы установить для свойства VerticalAlignment значение Center для всех элементов управления в моем UserControl, используя всего лишь небольшой кодвозможный.

Теперь у меня есть следующие решения:

  • грубая сила - поместите VerticalAlignment="Center" в каждый элемент управления
  • определите один стиль для FrameworkElement и примените его непосредственно
  • определяет стили для каждого типа элементов управления пользовательского элемента управления (для этого требуется 3 определения стиля, но автоматически применяется стиль к элементу управления)

Этим трем решениям требуется слишком много кода.
Есть ли другой способ написать это?
Я надеялся, что определение стиля для FrameworkElement автоматически установит свойство для всех элементов управления, но это не работает.

Вот фрагмент моего текущего XAML (яопущена вторая, очень похожая панель стека):

<UserControl.Resources>
    <Style x:Key="BaseStyle" TargetType="FrameworkElement">
        <Setter Property="VerticalAlignment" Value="Center" />
    </Style>
</UserControl.Resources>
<Grid>
    <StackPanel Orientation="Horizontal">
        <TextBlock Style="{StaticResource BaseStyle}" Text="Value:" />
        <RadioButton Style="{StaticResource BaseStyle}">Standard</RadioButton>
        <RadioButton Style="{StaticResource BaseStyle}">Other</RadioButton>
        <TextBox Style="{StaticResource BaseStyle}" Width="40"/>
    </StackPanel>
</Grid>

Редактировать:
Re Комментарий Уилла: Я действительно ненавижу идею написания кода форматирования элемента управления в коде позади.XAML должно быть достаточно для этого действительно простого пользовательского контроля.

Комментарий Re Muad'Dib: Элементы управления, которые я использую в своем пользовательском элементе управления, получены из FrameworkElement, так что здесь это не проблема.

1 Ответ

10 голосов
/ 01 августа 2010

Я тоже недавно столкнулся с той же загадкой.Не уверен, что это «лучший» способ, но им было достаточно легко управлять, определив свой базовый стиль, а затем создав отдельные стили для каждого элемента управления на странице, унаследованного от базового стиля:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Width="500" Height="300" Background="OrangeRed">

<Page.Resources>
  <Style TargetType="FrameworkElement" x:Key="BaseStyle">
    <Setter Property="VerticalAlignment" Value="Center" />
    <Setter Property="Margin" Value="0,0,5,0" />
  </Style>

  <Style TargetType="TextBlock" BasedOn="{StaticResource BaseStyle}" />
  <Style TargetType="RadioButton" BasedOn="{StaticResource BaseStyle}" />
  <Style TargetType="TextBox" BasedOn="{StaticResource BaseStyle}" />
</Page.Resources>

 <Grid>
    <StackPanel Orientation="Horizontal">
        <TextBlock Text="Value:" />
        <RadioButton>Standard</RadioButton>
        <RadioButton>Other</RadioButton>
        <TextBox Width="75"/>
    </StackPanel>
</Grid>

</Page>
...