我已经为其创建了自定义控件和默认样式。
我的XAML很简单:
<Style TargetType="{x:Type local:MyControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border CornerRadius="10" BorderThickness="1" Background="Transparent" BorderBrush="Black"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我使用DefaultStyleKey连接到此样式:
DefaultStyleKey = typeof(MyControl);
它有效。但是现在我想为控件创建其他样式。这是因为我的控件可以将某些模式定义为枚举,例如:
public enum ControlMode
{
Mode1,
Mode2
}
现在,当我的控件处于Mode1时,我希望它具有其默认样式。但是在Mode2中时,我希望它具有其他样式,例如:
<Style TargetType="{x:Type local:MyControl}" x:Key"styleForMode2>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border BorderThickness="1" Background="White" BorderBrush="Black"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我该如何实现? DefaultStyleKey仅适用于类型名称,因此我想到的唯一一件事就是为控件创建另一个类:MyControlWithMode2。但我敢肯定,还有更合适的方法。对吧?
(这不是库,不是应用程序,所以我无法使用应用程序的资源)
答案 0 :(得分:2)
假设您的控件具有Mode
属性,则默认的样式可以声明触发器以为不同的模式设置不同的ControlTemplate:
<Style TargetType="local:MyControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border CornerRadius="10" BorderThickness="1"
Background="Transparent" BorderBrush="Black"/>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Mode" Value="Mode2">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border BorderThickness="1" Background="White"
BorderBrush="Black"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>