Переопределяющие темы в WPF - PullRequest
5 голосов
/ 25 августа 2010

У меня небольшая проблема с проектом wpf, над которым я сейчас работаю.Я новичок в WPF.В моем app.xaml я использую тему Microsoft Aero для своего приложения.У меня есть что-то вроде этого в моем app.xaml

 <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/PresentationFramework.Aero;V3.0.0.0;31bf3856ad364e35;component/themes/Aero.NormalColor.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>

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

Если я определяю стиль для кнопки в моих ресурсах окна, например,

 <Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}" x:Key="RedTextBasedOnButton">
            <Setter Property="Foreground" Value="Red" />
        </Style>

и определяю кнопку на основе вышеуказанного стиля

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

BasedOn="{StaticResource {x:Type Button}}"

Я не думаю, что ресурс является статическим, так как он поступает из DLL, этодолжно быть что-то вроде этого.Хотя не уверен.

BasedOn="{DynamicResource {x:Type Button}}"

, но вышеприведенное выдает исключение и что, если у меня в файле app.xaml есть несколько ресурсов, например luna и classic.Как я могу сказать, какой из них использовать по умолчанию и в то же время использовать и переопределять другой (например, luna) специально для определенных элементов управления в моем пользовательском интерфейсе?Так что некоторые из моих кнопок будут основаны на стиле луны, а некоторые на стиле аэро с некоторыми дальнейшими модификациями?

Есть идеи?

С уважением,

1 Ответ

0 голосов
/ 30 июля 2014

Для вашего конкретного вопроса на

например. Для кнопок я хочу переопределить стиль шрифта, сохранив при этом остальную часть стиля аэро.

Я бы попробовал добавить это в свой словарь ресурсов:

<FontFamily x:Key="YourFont">Tahoma</FontFamily>

Тогда используйте это в своем стиле:

<Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}" x:Key="RedTextBasedOnButton">
     <Setter Property="FontFamily" Value="{StaticResource YourFont}"/>
</Style>

Таким образом, вы можете изменить FontFamily на основе одного ключа.

Я рекомендую посмотреть на это http://wpfthemes.codeplex.com/SourceControl/latest#WPF.Themes.Demo/Window1.xaml

...