簡體   English   中英

WPF模板繼承

[英]WPF Template Inheritance

我創建了一個按鈕。 我的基本要求是將圓形邊框加粗,並使用一種以上的顏色(例如,購買/出售按鈕)

我希望可以一​​次創建模板,而不是像這樣覆蓋邊框筆刷:

<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種顏色)。 希望有某種方法可以繼承模板。

您的代碼即將開始工作; 問題是GreenBorderButton會將BorderBrush應用於按鈕本身,而不是覆蓋模板中的Border。

要解決此問題,只需將Border的BorderBrush更改為使用父Button的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" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM