如何从隐式主题中明确使用样式?

时间:2013-11-11 10:50:22

标签: c# wpf xaml resourcedictionary

我想使用http://brianlagunas.com/free-metro-light-and-dark-themes-for-wpf-and-silverlight-microsoft-controls/

中免费提供的主题中的ToggleButton样式

问题是,如果我应用主题,不仅我的切换按钮被设置样式,而且每个控件都根据该主题设置样式。

如何从设计为隐式使用的主题中明确应用样式?

如何加载主题

    <Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <!-- Light Theme -->
            <ResourceDictionary Source="Themes/Metro/Light/Metro.MSControls.Core.Implicit.xaml" />
            <ResourceDictionary Source="Themes/Metro/Light/Metro.MSControls.Toolkit.Implicit.xaml" />

            <!-- Dark Theme -->
            <!--<ResourceDictionary Source="Themes/Metro/Dark/MetroDark.MSControls.Core.Implicit.xaml" />
            <ResourceDictionary Source="Themes/Metro/Dark/MetroDark.MSControls.Toolkit.Implicit.xaml" />-->

        </ResourceDictionary.MergedDictionaries>

        <!-- Light Theme -->
        <SolidColorBrush x:Key="BackgroundKey" Color="#FFFFFF" />

        <!-- Dark Theme -->
        <!--<SolidColorBrush x:Key="BackgroundKey" Color="#FF181818" />-->

    </ResourceDictionary>
</Window.Resources>

我打算如何使用主题

                <ToggleButton Content="ToggleButton" Width="150" Style="{StaticResource ToggleButtonStyle} />

感谢。

1 个答案:

答案 0 :(得分:1)

问题是您加载ResourceDictionary,为ToggleButton定义隐式样式。

由于您链接的下载页面实际上是在下载完整的解决方案,因此您有以下选项:

  1. 转到Metro.MSControls.Core.Implicit.xaml并将切换按钮的样式复制到您的资源(带ToggleButtonStyle键的资源,并且不要忘记“带上”所有必要的画笔。
  2. 由于那里没有DLL,我假设你编译了项目/解决方案 - 所以你可以重新编译它。如果是这样,请转到同一个文件并注释掉这一行:

    <Style BasedOn="{StaticResource ToggleButtonStyle}" TargetType="{x:Type ToggleButton}" />
    

    (文件中最后一个样式之前的一个)

    重新编译它,你很高兴。

  3. 我肯定会选择第2号选项。