自定义控件和generic.xaml中的其他样式

时间:2019-05-21 10:09:30

标签: c# wpf xaml

我已经为其创建了自定义控件和默认样式。

我的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。但我敢肯定,还有更合适的方法。对吧?

(这不是库,不是应用程序,所以我无法使用应用程序的资源)

1 个答案:

答案 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>