Я добавил PresentationFramework.Aero в свои объединенные словари App.xaml, как в...
<Application
x:Class="TestApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml" />
<ResourceDictionary
Source="pack://application:,,,/WPFToolkit;component/Themes/Aero.NormalColor.xaml" />
<ResourceDictionary
Source="/CommonLibraryWpf;component/ResourceDictionaries/ButtonResourceDictionary.xaml" />
<!-- Note, ButtonResourceDictionary.xaml is defined in an external class library-->
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
Я пытаюсь слегка изменить внешний вид кнопок по умолчанию. Я поместил этот стиль в свой ButtonResourceDictionary:
<Style TargetType="Button">
<Setter Property="Padding" Value="3" />
<Setter Property="FontWeight" Value="Bold" />
</Style>
Все кнопки теперь имеют правильное дополнение и полужирный текст, но они выглядят "классическими", а не "аэро". Как я могу исправить этот стиль, чтобы все кнопки отображали Aero, но также имели эти незначительные изменения? Я бы предпочел не устанавливать свойство Style
для каждой кнопки.
Обновление
Я должен был упомянуть об этом в первую очередь, но если я попытаюсь использовать BasedOn
, как показано ниже, я получаю StackOverflowException
:
<Style BasedOn="{StaticResource {x:Type Button}}" TargetType="{x:Type Button}">
<Setter Property="Padding" Value="3" />
<Setter Property="FontWeight" Value="Bold" />
</Style>
Это обычно работает, но не с объединенными словарями Aero. Если я прокомментирую эти словари, исключение исчезнет.
Обновление 2
Если добавить атрибут x:Key
и вручную установить стиль, он будет работать правильно (стиль Aero с дополнением и полужирным шрифтом), но, как я уже сказал, я бы предпочел, чтобы стиль автоматически применялся глобально ко всем кнопкам.
Обновление 3
Я только что обнаружил новую морщину. В моем приложении ButtonResourceDictionary.xaml помещается в библиотеку классов (т.е. Во внешний проект). Если я переведу этот файл в локальную папку, все будет хорошо. Таким образом, проблема представляет собой плохое взаимодействие, вызванное ссылкой на различные словари внешних ресурсов. Я исправляю свой фрагмент кода App.xaml(выше), чтобы отразить, что ButtonResourceDictionary фактически определен внешне.