Наследование / переопределение стилей WPF - PullRequest
1 голос
/ 20 сентября 2010

Я создал стиль для кнопки-переключателя, определенный ниже:

<Style TargetType="{x:Type ToggleButton}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type ToggleButton}">
        <Border HorizontalAlignment="Center" VerticalAlignment="Center" x:Name="border" Padding="5,5,5,5" CornerRadius="5" Background="#FFBFACAC" BorderBrush="#FF000000" BorderThickness="1,1,1,1" SnapsToDevicePixels="True">
          <ContentPresenter x:Name="contentPresenter"/>
        </Border>
        <ControlTemplate.Triggers>
          <Trigger Property="IsChecked" Value="true">
            <Setter Property="Foreground" Value="White"/>
            <Setter Property="Background" TargetName="border">
              <Setter.Value>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                  <GradientStop Color="#FF36587C" Offset="0.5"/>
                  <GradientStop Color="#FF122F53" Offset="1"/>
                </LinearGradientBrush>
              </Setter.Value>
            </Setter>
          </Trigger>
          <Trigger Property="IsChecked" Value="false">
            <Setter Property="Foreground" Value="Black"/>
            <Setter Property="Background" TargetName="border">
              <Setter.Value>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                  <GradientStop Color="LightGray" Offset="0.5"/>
                  <GradientStop Color="White" Offset="1"/>
                </LinearGradientBrush>
              </Setter.Value>
            </Setter>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

У меня есть несколько кнопок-переключателей, но я бы хотел изменить их радиус угла границы.Например, я хотел бы, чтобы кнопки с только правыми углами были скруглены, или некоторые без скругления углов.

Нужно ли заново создавать весь стиль для каждого типа округления, в котором есть единственное отличие?в каждом стиле будет следующая строка?

    <Border HorizontalAlignment="Center" VerticalAlignment="Center" x:Name="border" Padding="5,5,5,5" CornerRadius="5" Background="#FFBFACAC" BorderBrush="#FF000000" BorderThickness="1,1,1,1" SnapsToDevicePixels="True">

Так как скругление углов является частью шаблона элемента управления, я не думаю, что смогу каким-то образом изменить только часть шаблона в новом стиле без включениявсе это, но я не уверен.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 20 сентября 2010

Вам нужно будет создать весь стиль, чтобы изменить часть шаблона элемента управления.Я предлагаю поместить это в словарь ресурсов, который вы можете объединить как часть своего окна, чтобы сохранить очиститель XAML окна (или элемента управления).

Простой способ сделать это с помощью Blend - добавить нужный элемент управления ищелкните его правой кнопкой мыши, затем выберите «Изменить шаблон», чтобы редактировать копию шаблона.

0 голосов
/ 20 сентября 2010

Альтернативой является создание пользовательского элемента управления, унаследованного от ToggleButton.

Затем вы можете иметь свойство с именем CornerRadius, а в общем шаблоне для класса сделать TemplateBinding для этого свойства.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...