[英]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.