Каков рекомендуемый способ создания обложки для всего приложения в WPF? - PullRequest
24 голосов
/ 23 сентября 2008

Я хочу, чтобы мое приложение WPF можно было менять с помощью скинов, применяя определенный шаблон XAML, и изменения должны быть общесоединенными, даже для динамических элементов управления или элементов управления, которые даже не находятся в визуальном / логическом дереве.

Что я могу использовать для реализации этого типа функций? Есть ли хорошие ресурсы или учебные пособия, которые показывают, как можно выполнить эту конкретную задачу?

Ответы [ 3 ]

10 голосов
/ 23 сентября 2008

Основной подход заключается в использовании ресурсов во всем приложении и динамической замене ресурсов во время выполнения.

См. http://www.nablasoft.com/alkampfer/index.php/2008/05/22/simple-skinnable-and-theme-management-in-wpf-user-interface/ для базового подхода

4 голосов
/ 23 сентября 2008

Замена ресурса будет работать, но я обнаружил, что «структурное покрытие» более мощное! Подробнее об этом читайте в CodeProject ...

http://www.codeproject.com/KB/WPF/podder1.aspx

2 голосов
/ 24 сентября 2008

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

Пример:

 <Application.Resources>
    <Style x:Key="{x:Type Button}" TargetType="{x:Type Button}">
        <Setter Property="Button.Background" Value="CornflowerBlue"/>
        <Setter Property="Button.Template">
            <Setter.Value>
                <ControlTemplate x:Name="MyTemplate">
                    ...
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Application.Resources>

здесь ключом стиля является x: Key = "{x: Type Button}", поэтому стиль будет применяться ко всем элементам управления кнопки type без элемента управления, объявляющего свойство Style статическим или динамическим ресурсом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...