如何修改默认控件主题?

时间:2012-03-16 19:23:52

标签: wpf wpf-controls

我想修改项目的默认控件模板。对于我的第一次更改,我只想在每个主题中为listview的ScrollViewer建立一个部件名称。

这是我的结构: MyControlLibrary:定义几个控件并定义标准wpf控件的主题。 MyApplication:使用控件库和包含的主题。

这是我到目前为止所知道的。 从以下网址下载默认主题:http://archive.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=wpfsamples&DownloadId=7812

将下载的主题添加到MyControlLibrary中的Themes文件夹,添加必要的引用,并修改xmlns:theme命名空间以引用程序集。

从这里开始,我还没想出下一步该做什么。如果只是覆盖模板,那不是太难,但我希望应用程序仍然可以识别主题。

提前致谢

修改 好的,我找到了解决方案。我希望这有助于其他人。

更新您的App.xaml

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="{ThemeDictionary AssemblyName=AssemblyWithThemes}"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
    <!-- other styles go here -->
</Application.Resources>

其中AssemblyWithThemes是包含带有主题文件的Themes \文件夹的程序集的名称。我相信也需要从您的应用程序中引用程序集。

非常重要的是,如果直接在App.xaml文件中包含其他资源,请将它们放在注释所在的位置,否则包含的ResourceDictionary将成为另一个资源,而不是设置Application.Resources属性。

然后,所有其他样式需要指定BasedOn属性以保留主题更改。对于动态创建的窗口,我使用了新的Style(Type),它阻止了被覆盖的主题被使用。更改为新样式(类型,样式)后,它工作得很好。

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方法。我希望这有助于其他人。

更新您的App.xaml

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="{ThemeDictionary AssemblyName=AssemblyWithThemes}"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
    <!-- other styles go here -->
</Application.Resources>

其中AssemblyWithThemes是包含带有主题文件的Themes \文件夹的程序集的名称。我相信也需要从您的应用程序中引用程序集。

非常重要的是,如果直接在App.xaml文件中包含其他资源,请将它们放在注释所在的位置,否则包含的ResourceDictionary将成为另一个资源,而不是设置Application.Resources属性。

然后,所有其他样式需要指定BasedOn属性以保留主题更改。对于动态创建的窗口,我使用了新的Style(Type),它阻止了被覆盖的主题被使用。更改为新样式(类型,样式)后,它工作得很好。