Пользовательский контроль и дополнительный стиль в generic.xaml для него - PullRequest
0 голосов
/ 21 мая 2019

Я создал собственный элемент управления и стиль по умолчанию для него.

Мой 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
}

Теперь, когда мой элемент управления находится в режиме 1, я хочу, чтобы он имел стиль по умолчанию.Но когда он в 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 Ответ

2 голосов
/ 21 мая 2019

Предполагая, что ваш элемент управления имеет свойство 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...