我有两种风格几乎完全相同:
<Style x:Key="CancelButtonStyle" TargetType="{x:Type Button}" >
<!-- gigantic common code -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<!-- more common code -->
<Path Data="DIFFERENT_VALUE_A"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="OkButtonStyle" TargetType="{x:Type Button}" >
<!-- gigantic common code -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<!-- more common code -->
<Path Data="DIFFERENT_VALUE_B"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我想提取公共代码(“样式模板”),然后像这样使用它:
<Style x:Key="OkButtonStyle" Base="PathButtonStyle" PathData="DIFFERENT_VALUE_B" />
编辑: 正如我在标题中指定的那样,我不想创建自己的控件
答案 0 :(得分:3)
只需在ControlTemplate
中单独定义Resources
个对象:
<ControlTemplate x:Key="ControlTemplate1">
<!-- different part -->
</ControlTemplate>
<ControlTemplate x:Key="ControlTemplate2">
<!-- different part -->
</ControlTemplate>
为公共部分创建一个Style
:
<Style x:Key="BaseStyle" TargetType="{x:Type Button}" >
<!-- gigantic common code -->
</Style>
然后将新样式基于该样式,引用新的ControlTemplate
:
<Style x:Key="CancelButtonStyle" TargetType="{x:Type Button}"
BasedOn="{StaticResource BaseStyle}">
<Setter Property="Template" Value="{StaticResource ControlTemplate1}" />
</Style>
<Style x:Key="OkButtonStyle" TargetType="{x:Type Button}"
BasedOn="{StaticResource BaseStyle}">
<Setter Property="Template" Value="{StaticResource ControlTemplate2}" />
</Style>
答案 1 :(得分:1)
您可以使用Tag传递PathData:
<Style x:Key="BaseStyle" TargetType="{x:Type Button}" >
<!-- gigantic common code -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<!-- more common code -->
<Path Data="{TemplateBinding Tag}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
然后在您的个人风格中设置标记:
<Style x:Key="CancelButtonStyle" TargetType="{x:Type Button}"
BasedOn="{StaticResource BaseStyle}">
<Setter Property="Tag" Value="MY PAth A" />
</Style>
<Style x:Key="OkButtonStyle" TargetType="{x:Type Button}"
BasedOn="{StaticResource BaseStyle}">
<Setter Property="Tag" Value="MY PAth B" />
</Style>
答案 2 :(得分:0)
您可以创建自己的Button,它源自Wpf-Button并具有PathData属性:
public class PathButton:Button
{
public string PathData {get;set;}
}
你的风格可能是:
<Style x:Key="PathButtonStyle" TargetType="{x:Type ns:PathButton}" >
<!-- gigantic common code -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<!-- more common code -->
<Path Data="{TemplateBinding PathData}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
要使用它,你必须这样做:
<ns:PathButton Style="{StaticResource PathButtonStyle}" PathData="M200 200 100 100 L0 0"/>
或者您创建自己的Custom Control
,方式也是一样。
此处的广告无论您要使用多少个不同的按钮,资源中只有一个Style
和一个类PathButton
)。
您只需更改PathData
的{{1}} - 属性即可更改其外观。