Как использовать несколько WPF ResourceDictionary отдельно в одном окне WPF? - PullRequest
0 голосов
/ 05 мая 2020

Я реализую приложение WPF и хочу использовать библиотеки пользовательского интерфейса. Я нашел «ModernWpfUI» и «HandyControl» в визуальной студии NuGet и установил их. Теперь я хочу использовать их отдельно в одном окне WPF. Например, я хочу, чтобы в окне было два слайдера, первый из которых имеет стиль «ModernWpfUI», а второй - стиль «HandyControl».

для этого я добавил

<Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ui:ThemeResources />
                <ui:XamlControlsResources />
                <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>

в свой .xaml, а затем я добавил

<Slider Orientation="Vertical" Margin="309,48,444,98" ></Slider>
        <Slider Orientation="Vertical" Margin="413,48,340,98"></Slider>

, но теперь оба они имеют одинаковый стиль (стиль «HandyControl»). как получить

        <Slider Orientation="Vertical" Margin="309,48,444,98" ></Slider>
        <!---- With HandyControl style-->
        <Slider Orientation="Vertical" Margin="413,48,340,98"></Slider>
        <!---- With ModernWpfUI style-->

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Установите для свойства Style каждого элемента управления явно значение Style, которое вы хотите применить. Это должно работать:

<!---- With HandyControl style-->
<Slider Style="{StaticResource SliderBaseStyle}" Orientation="Vertical" Margin="309,48,444,98" />

<!---- With ModernWpfUI style-->
<Slider Style="{StaticResource DefaultSliderStyle}" Orientation="Vertical" Margin="413,48,340,98"/>
1 голос
/ 05 мая 2020

Причина, по которой это происходит, заключается в том, что и ModernWpfUI, и HandyControl используют неявные стили для элемента управления Slider.

То есть их стили применяются к типу, а не к ключу стиля. Таким образом, побеждает последний, указанный в ваших ресурсах. В этом случае HandyControl.

Чтобы использовать оба стиля, вам необходимо использовать явный ключ стиля для каждого из них. Вы можете получить ключ стиля, посмотрев на их XAML.

Это будет выглядеть примерно так:

<Slider Orientation="Vertical" Margin="309,48,444,98" Style="{DynamicResource WhatEverHandlyControlStyleIs}" />
<!---- With HandyControl style-->

<Slider Orientation="Vertical" Margin="413,48,340,98" Style="{DynamicResource DefaultSliderStyle}" />
<!---- With ModernWpfUI style-->
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...