Наследование шаблона WPF - PullRequest
0 голосов
/ 08 июля 2010

Я создал кнопку. Мои основные требования - округленная более толстая граница, с более чем одним цветом (то есть для кнопок Buy / Sell)

Я надеялся, что смогу создать шаблон один раз, а затем просто переопределить кисть границы следующим образом:

<Style x:Key="BorderButton">
  <Setter Property="Control.Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type Button}">
        <Border BorderThickness="2" 
         BorderBrush="Red" 
         CornerRadius="3" 
         Background="{x:Null}">
           <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Border>
      </ControlTemplate>
     </Setter.Value>            
    </Setter>
  </Style>

  <Style x:Key="GreenBorderButton" BasedOn="{StaticResource BorderButton}" TargetType="{x:Type Button}">
    <Setter Property="BorderBrush" Value="Green" />
  </Style>

но они оба производят один и тот же стиль. Нужно ли каждый раз выписывать весь шаблон? кажется ненужным повторением кода (особенно если желательно 3-4 цвета). Надеюсь, что есть какой-то способ унаследовать шаблон.

1 Ответ

2 голосов
/ 08 июля 2010

Ваш код очень близок к работе; проблема заключается в том, что GreenBorderButton применяет BorderBrush к самой кнопке, а не к границе в переопределенном шаблоне.

Чтобы это исправить, просто измените BorderBrush Border, чтобы использовать BorderBrush родительской кнопки. Вы можете сделать это с помощью TemplateBinding так:

<Style x:Key="BorderButton">
    <Setter Property="Control.Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border x:Name="border"
                        BorderThickness="2" 
                        BorderBrush="{TemplateBinding Property=BorderBrush}"
                        CornerRadius="3" 
                        Background="{x:Null}">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Затем вы можете использовать те же переопределенные стили, что и у вас, или вы можете просто сделать:

<Button Style="{StaticResource BorderButton}" BorderBrush="Blue" Content="Blue" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...