如何修改DevExpress WPF控件的主题
2个回答
2015-01-09 · 知道合伙人数码行家
可以叫我表哥
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:25897
获赞数:1464984
2010年毕业于北京化工大学北方学院计算机科学与技术专业毕业,学士学位,工程电子技术行业4年从业经验。
向TA提问 私信TA
关注
展开全部
DevExpress 控件是利用模版来呈现控件外观的。 要呈现一个绝佳的外观,我们需要使用带有嵌套边框和渐变画笔的复杂模版。这样一来,不能通过简单的风格设置来改变控件的颜色,因为控件的颜色改变取决于不同画笔产生的视觉效果。本文主要想客户展示如何修改主题的模版。
要修改控件的外观,你需要找到必要元素的模版,将模版嵌入到您的应用程序资源中,准确的修改模版并且不可破坏模版的内部结构。一旦你修改了模版的结构,你便会破坏一些功能。
另外,还值得一提的是,相同的模版会因为主题的不同而不同。要实现一个特定主题的自定义模版(不是默认深蓝主题),需要在模版KEY中指定ThemeName属性。下面以我们的默认深蓝主题的RowIndicator的模版为例:
[XAML]
xmlns:dxgt="http://schemas.devexpress.com/winfx/2008/xaml/grid/themekeys"
...
<Window.Resources>
<DataTemplate x:Key="{dxgt:RowIndicatorThemeKey ResourceKey=IconPresenterTemplate}">
....
</DataTemplate>
</Window.Resources>
如果您分配Office2007Black主题,该模板将不适用。创建一个Office2007Black模板,分配的ThemeName的属性:
[XAML]
xmlns:dxgt="http://schemas.devexpress.com/winfx/2008/xaml/grid/themekeys"
...
<Window.Resources>
<DataTemplate x:Key="{dxgt:RowIndicatorThemeKey ResourceKey=IconPresenterTemplate,ThemeName=Office2007Black}">
..
</DataTemplate>
</Window.Resources>
如果你不需要为不同的主题创建模版,您的自定义模板是一个独立的主题,只需设置IsThemeIndependent属性为True:
[XAML]
xmlns:dxgt="http://schemas.devexpress.com/winfx/2008/xaml/grid/themekeys"
...
<Window.Resources>
<DataTemplate x:Key="{dxgt:RowIndicatorThemeKey ResourceKey=IconPresenterTemplate, IsThemeIndependent=true}">
..
</DataTemplate>
</Window.Resources>
到现在,最有趣的问题就是如何找到所需模版。在DevExpress WPF中有两种方法可以找到所需模版:使用snoop工具和使用ThemeEditor。
Snoop工具:这个工具允许你搜索控件的可视化树。
在控件库文件夹中搜索需要的名称,以GridControl为例:
"c:\Program Files (x86)\DXperience 12.1\Sources\DevExpress.Xpf.Grid"
如果你不使用默认名称,你需要在相应的主题文件夹中寻找:
"c:\Program Files (x86)\DXperience 12.1\Sources\DevExpress.Xpf.Themes"
最后一步就是,从源代码中复制模版,将模版嵌入到容器资源中如Window.Resources。请记住,你需要使用默认深蓝主题,利用修改后的模版。
Theme Editor:它是一个独立的编辑器工具,可让你修改内置的DevExpress主题和创建基于内置主题的新主题。该新工具的主要目的是简化挨罚人员编辑第三方主题的繁琐工作,只用一个标记来定位特定的视觉元素和外观设置。
要修改控件的外观,你需要找到必要元素的模版,将模版嵌入到您的应用程序资源中,准确的修改模版并且不可破坏模版的内部结构。一旦你修改了模版的结构,你便会破坏一些功能。
另外,还值得一提的是,相同的模版会因为主题的不同而不同。要实现一个特定主题的自定义模版(不是默认深蓝主题),需要在模版KEY中指定ThemeName属性。下面以我们的默认深蓝主题的RowIndicator的模版为例:
[XAML]
xmlns:dxgt="http://schemas.devexpress.com/winfx/2008/xaml/grid/themekeys"
...
<Window.Resources>
<DataTemplate x:Key="{dxgt:RowIndicatorThemeKey ResourceKey=IconPresenterTemplate}">
....
</DataTemplate>
</Window.Resources>
如果您分配Office2007Black主题,该模板将不适用。创建一个Office2007Black模板,分配的ThemeName的属性:
[XAML]
xmlns:dxgt="http://schemas.devexpress.com/winfx/2008/xaml/grid/themekeys"
...
<Window.Resources>
<DataTemplate x:Key="{dxgt:RowIndicatorThemeKey ResourceKey=IconPresenterTemplate,ThemeName=Office2007Black}">
..
</DataTemplate>
</Window.Resources>
如果你不需要为不同的主题创建模版,您的自定义模板是一个独立的主题,只需设置IsThemeIndependent属性为True:
[XAML]
xmlns:dxgt="http://schemas.devexpress.com/winfx/2008/xaml/grid/themekeys"
...
<Window.Resources>
<DataTemplate x:Key="{dxgt:RowIndicatorThemeKey ResourceKey=IconPresenterTemplate, IsThemeIndependent=true}">
..
</DataTemplate>
</Window.Resources>
到现在,最有趣的问题就是如何找到所需模版。在DevExpress WPF中有两种方法可以找到所需模版:使用snoop工具和使用ThemeEditor。
Snoop工具:这个工具允许你搜索控件的可视化树。
在控件库文件夹中搜索需要的名称,以GridControl为例:
"c:\Program Files (x86)\DXperience 12.1\Sources\DevExpress.Xpf.Grid"
如果你不使用默认名称,你需要在相应的主题文件夹中寻找:
"c:\Program Files (x86)\DXperience 12.1\Sources\DevExpress.Xpf.Themes"
最后一步就是,从源代码中复制模版,将模版嵌入到容器资源中如Window.Resources。请记住,你需要使用默认深蓝主题,利用修改后的模版。
Theme Editor:它是一个独立的编辑器工具,可让你修改内置的DevExpress主题和创建基于内置主题的新主题。该新工具的主要目的是简化挨罚人员编辑第三方主题的繁琐工作,只用一个标记来定位特定的视觉元素和外观设置。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询