UWP - создание подклассов для встроенных элементов управления и наследование стилей поведения - PullRequest
0 голосов
/ 26 мая 2020

Можно ли создать подкласс элемента управления (AppBarToggleButton в моем случае) и «унаследовать» TargetType базового класса? Я хочу добиться того, чтобы слегка настроенный AppBarToggleButton (с отключенным поведением автопереключения) был помещен в CommandBar и чтобы он выглядел точно так, как если бы он был обычным AppBarToggleButton (т.е. получать стиль, который определен для AppBarToggleButton внутри данный шаблон управления панелью команд). Они говорят, что DefaultStyleKey должно помочь, но это нормально унаследовано, но, увы, похоже, не участвует в разрешении / поиске локального стиля.

1 Ответ

0 голосов
/ 27 мая 2020
• 1000 *

В общем, нам нужно make Templated Control для custom AppBarToggleButton. Когда мы создаем шаблонный элемент управления с помощью Visual Studio, он создает файл Generic.xaml в папке Themes , который использовался для объявления стиля настраиваемого элемента управления. И файл cs настраиваемого элемента управления, как показано ниже.

public sealed class CustomAppBarToggleButton : AppBarToggleButton
{
    public CustomAppBarToggleButton()
    {
        this.DefaultStyleKey = typeof(CustomAppBarToggleButton);
    }
}

Если вы не хотите редактировать стиль по умолчанию, вы можете удалить строку DefaultStyleKey, которая использовалась для привязки текущего элемента управления к стилю в Generi c .xaml файл.

Откройте Generic.xaml файл, вы найдете следующее. И это пустой стиль. Если мы хотим внести небольшие изменения, вам нужно скопировать полный стиль AppBarToggleButton, чтобы заменить его, и отредактировать TargetType на local:CustomAppBarToggleButton. Затем вы можете отредактировать базу стилей по своему усмотрению.

<Style TargetType="local:CustomAppBarToggleButton" >
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:CustomAppBarToggleButton">
                <Border
                    Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}">
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

И если вы хотите создать новое свойство зависимости, определите его в файле cs, а затем используйте TemplateBinding для привязки свойства в стиле. Для получения дополнительной информации, пожалуйста, проверьте этот документ .

...