Как мне наследовать / переписать принудительный стиль из темы Windows? - PullRequest
1 голос
/ 27 ноября 2008

в настоящее время я заставляю мое приложение WPF использовать тему luna, несмотря ни на что, с этим кодом XAML

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Styles.xaml" />
            <ResourceDictionary Source="NavigationCommands.xaml" />
            <ResourceDictionary Source="/RibbonControlsLibrary;component/Themes/Office2007Blue.xaml"/>
            <ResourceDictionary Source="/PresentationFramework.Luna, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;;component/Themes/luna.normalcolor.xaml" /> 
            </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

и теперь я хочу расширить стиль каждого текстового поля с помощью этого триггера проверки

<Style TargetType="TextBox">
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="Background" Value="#d3e1f3"></Setter>
            <Setter Property="ToolTip"
            Value="{Binding RelativeSource={RelativeSource Self}, 
                   Path=(Validation.Errors)[0].ErrorContent}"/>
        </Trigger>
    </Style.Triggers>
</Style>

но этот триггер не работает, потому что я включил тему луны. (без принудительной темы все работает как надо, но не выглядит так, как надо :() Есть ли какой-нибудь способ форсировать лунную тему и расширить ее стиль? вероятно, через свойство BasedOn?

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

ТИА

Ответы [ 4 ]

1 голос
/ 28 ноября 2008

Синтаксис BasedOn для стилей типов выглядит следующим образом:

<Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">

НТН

1 голос
/ 27 ноября 2008

Попробуйте

<Style x:Key="{x:Type TextBox}" TargetType="{x:Type TextBox}">
0 голосов
/ 06 ноября 2013

Используйте упомянутое

<Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">

но также убедитесь, что ваши словари включены в правильном порядке - сначала те, на которых вы основываете свой стиль

<Application.Resources>
<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="/RibbonControlsLibrary;component/Themes/Office2007Blue.xaml"/>
        <ResourceDictionary Source="/PresentationFramework.Luna, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;;component/Themes/luna.normalcolor.xaml" /> 

        <ResourceDictionary Source="Styles.xaml" />
        <ResourceDictionary Source="NavigationCommands.xaml" />
   </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

0 голосов
/ 12 января 2011

Пытались ли вы сначала установить ресурсный ресурс lune, а последний - собственный ресурсный ресурс? Я могу вообразить, что тема луны перекрывает твой стиль.

<Application.Resources>
   <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/PresentationFramework.Luna, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;;component/Themes/luna.normalcolor.xaml" />
            <ResourceDictionary Source="/RibbonControlsLibrary;component/Themes/Office2007Blue.xaml"/> 
            <ResourceDictionary Source="Styles.xaml" />
            <ResourceDictionary Source="NavigationCommands.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>
...