如何修改DevExpress WPF控件的主题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何修改DevExpress WPF控件的主题相关的知识,希望对你有一定的参考价值。
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主题和创建基于内置主题的新主题。该新工具的主要目的是简化挨罚人员编辑第三方主题的繁琐工作,只用一个标记来定位特定的视觉元素和外观设置。 参考技术A DevExpress.Xpf.Core.ThemeManager.ApplicationThemeName
第三方 WPF 控件:Devexpress vs Telerik [关闭]
【中文标题】第三方 WPF 控件:Devexpress vs Telerik [关闭]【英文标题】:Third party WPF controls: Devexpress vs Telerik [closed] 【发布时间】:2011-07-11 17:16:00 【问题描述】:我想听听您对这两个控制提供者的看法。
简而言之:我正在构建一个经典的 LOB 桌面应用程序。该应用程序将完全在 WPF 中创建。 PRISM 4.0 将被大量使用。只要有可能,我将尝试遵循 MVVM 模式(如果所选控件设计为易于采用它会很好)。
我主要感兴趣的是:
良好的数据网格,支持排序、过滤、分组, 出口,打印和工作正常 有大量的束缚 记录(10k+)
组合框,支持过滤和自动完成。
导航栏
布局管理器,与 VS 2010 使用的类似
从长远来看,我也想使用他们的:
报告工具
“数据挖掘”控件
本地化支持以本地化数据网格操作,例如,..
我使用 Winforms Devxpress 已经有一段时间了,我很满意。他们的支持团队很棒。不过,我想检查一下市场上是否有更好的选择。换句话说,我想知道 Telerik 的控件是否有任何附加价值?
【问题讨论】:
【参考方案1】:几个月前我们不得不做出一个非常相似的决定。我们使用的是 WinForms、Microsoft Composite UI Application Block 和 DevExpress WinForms。对于我们从头开始创建的新应用程序,我们决定使用 WPF(没有 PRISM),我们特别需要一些网格,所以我们使用了 DevExpress WPF 控件。
恕我直言,这是一个好坏的决定。
好的部分:
您可以以非常相似的方式使用这些控件。有一些差异,但你很快就会习惯它们。这是一个巨大的优势,因为我们在使用 WinForm 控件时花了一些时间来适应它们。
这些控件,尤其是网格,可用作 WinForms 控件。如果你的用户习惯了,过渡会非常顺利。
应用所提供的主题之一非常简单,您会得到一个好看的解决方案而不会带来太多烦恼。它们也适用于纯 WPF 控件,因此整个应用程序看起来一致。我们仍然主要使用 Windows XP,主题也适用于此,这对我们非常有用。
不好的部分:
我们希望 DevExpress WPF 控件提供与 WinForm 控件相同的控件覆盖范围。当时的 DevExpress WPF 控件的版本号为 10.1,我们对某些控件完全丢失感到失望(例如 TreeList、Scheduler、Passwordbox 或非常有用的 LookUpEdit)。虽然后三个在 10.2 版中可用,但 TreeLists 仍然不存在。如果您正在从 WinForms 包中寻找其他控件而不是列出的控件,最好先检查它们是否存在于 DX WPF 控件中。
有些部分给人的印象是它们很快就完成了。需要一些快速修复来使控件按照我们打算使用它们的方式运行。好在这些问题大部分都用 10.2 解决了。
WPF 控件的文档和支持中心感觉不如 WinForms 文档完整。虽然这可能只是我个人的印象,但我几乎总能找到我在 DX 网站上使用 WinForms 控件时遇到的某个问题的答案,但我对 WPF 控件并不那么成功。不过,支持团队一如既往地乐于助人。
此列表并非详尽无遗,这些都是我立即想到的事情。
那么,如果我不得不再次做出同样的决定,我会怎么做?我很可能会再次使用 DevExpress。大多数困扰我的负面问题都在 10.2 版中得到修复,因此这些控件现在非常可用。我特别喜欢你可以使用你以前对 WinForm 控件的经验(当然有限制)。后者也是购买DX组件的主要原因。不幸的是,我对 Telerik 控件的了解还不足以说明它们,所以如果有人对这两个控件都有经验,尤其是从 DX 切换到 Telerik,那肯定会是一个非常有趣的信息。
我们没有在网格中使用 MVVM 模式,因为加载和显示数据的“传统”方式对我们来说已经足够了。我们的一些网格包含 100k+ 值,网格的性能总是好的。这些控件看起来不像它们具有对 MVVM 的支持,如果您尝试使用它,看起来您必须手动完成所有操作。也许10.2在这里改变了一些东西,我没有检查过,但我不这么认为。
我们使用自己的实现进行本地化,所以我不知道 DX 本地化支持。
【讨论】:
【参考方案2】:我评估了几个 WPF 控件包,Telerik、devExpress、Xceed、SyncFusion 等。我们主要对能够处理大量数据并具有良好性能的网格控件感兴趣。在一个简单的测试中,我们将 120,000 个项目加载到网格中,并对字段进行了分组。
与其他人相比,DevExpress 是空腹加载。加载需要 15 秒,而其他加载时间约为 45 秒。 DV 将在 7 秒内分组,而其他人则需要近 45 秒。其他几个控件包被锁定了! (仅供参考,数据是从 Mongo 加载的)。
在 Telerik 上调出一列的筛选对话框时,它会超出屏幕底部而没有任何滚动条。此外,点击下拉组合中的过滤器项目将立即执行过滤器,而不是等待我选择其他过滤器。因此,如果选择 5 个项目,则需要 5 倍的时间。
我希望 DevExpress 有一个复选框下拉过滤器选项(如 Excel)。您只能选择一个值,但它确实有一个非常好的过滤器对话框,允许您执行更复杂的过滤器。尽管如此,还是希望能够轻松检查一些值并快速继续。
Telerik 使用实体框架与 Sql Server 完美集成。它的分页、排序、过滤等直接与 EF 集成,并让 Sql Server 在数据库中执行这些操作。很不错!我监视 sql 命令作为执行操作。如果您在 sql server 上查看大量数据,这可能是真正做得很好的一个控件。 (除了不能很好地处理大数据的下拉过滤器组合)。我们将 Mongo 用于我们的大数据,所以这不适用于我们。在测试数据时,我们确实遇到了 Telerik 的一些例外情况。 DevExpress 没有分页选项,除非您自己使用。
最终我们选择DV是因为性能原因,数据量大,稳定性好。
【讨论】:
【参考方案3】:我肯定会选择 DevExpress,在我看来,它们的组件比 Telerik 的组件更好,API 更好,那么别忘了你已经知道他们的对象模型、命名约定和 Windows 窗体世界的 API,这是这不是一件小事,因为您很可能会重复使用您的专业知识,而这更加重要和有价值。
【讨论】:
【参考方案4】:Telerik RadDataGrid 直接开箱即用地支持 MVVM 和命令模式。 DevExpress 需要大量额外的代码才能正确使用 MVVM。
【讨论】:
这是一个重要的问题。在 DevExpress 中使用 MVVM 确实令人头疼。它的实现与 WinForms 非常相似,因此 MVVM 没有很好地实现。 我在即将结束的项目中使用了 5-7 个 DataGrids,不需要额外的代码来使 DevExpress DataGrids 在我的 MVVM 架构中工作。 让我的 MVVM 框架 (Prism) 与 UI 控件 (DevExpress) 分离对我来说效果很好【参考方案5】:我同时使用 Telerik 和 DEVExpress。根据我的经验,DevExpress 在 win 表单控件方面做得更好。但是,Telerik 比 Asp.NET 控件更好。 服务器控件上的 DevExpress 渲染结果在客户端站点中非常混乱。他们使用 table 标签创建按钮控件。
【讨论】:
问题是关于 WPF,而不是 ASP.NET。 我使用过 DevExpress 和 Telerik WPF 控件。我更喜欢 DevExpress :)【参考方案6】:DevExpress WPF 速度很慢并且没有优化性能。我已经尝试过 DevExpress 和 Telerik 的富文本编辑控件。 Telerik control 在性能方面优于 DevExpress。
【讨论】:
【参考方案7】:几个月前,在为一个新的 WPF 项目评估 WPF 控件时,我的处境完全相同。我不确定您是否做出任何决定,但我可以提供我在 Telerik 的经验,希望对您有所帮助。
在我的项目中,一个特殊的需求是使用 TreeListView,并且提供此控件的知名供应商有限。我花了一些时间进行研究,发现 Telerik 可以满足我的需求。我下载了试用版并使用了 2 个月,联系了他们的支持,查看了他们的论坛。我可以告诉你,他们有很好的支持!通常,支持人员会提供带有示例代码的解决方案。像所有开发人员一样,我们会遇到障碍,我们研究了 API、文档和示例。对我来说,支持很重要,因为它可以节省开发时间!我的反馈是 Telerik 提供了出色的 UI 控件,具有大量的收藏和自定义选择,以及出色的技术支持。但是,他们的文档并不是那么好。另外,请注意 WPF 控件的性能,我的经验是,如果您有大型数据源,它会影响性能。如果性能是关键要求,请务必在关键架构领域做一些原型。
试一试,看看它是否满足您的需求。
顺便说一句,我也是 ComponentOne 的客户。如果可以节省您的时间,只需获取所需的控件即可。重要的是这有助于按时运送您的产品!希望这会有所帮助。
【讨论】:
【参考方案8】:我会接受 Telerik...#1 原因是支持,#2 原因是如果控件无法执行您需要的操作,您只需提交票证或发布到支持论坛,然后您可以推动他们的功能开发。
...很酷:)
【讨论】:
【参考方案9】:我相信 devexpress 在 WinFormApp 中确实更好。我用了好几年了,真的很好用。 另一方面,最近我尝试了它的 WPF 控件,这太糟糕了,而且我没有时间为这个项目切换到 Telerik。 我对 devex 的另一个问题是 RTL。如果您想拥有一个多语言应用程序,这可能很重要。 Telerik 可以支持 RTL 但 Devex 在 WinApp 中不支持它,在 Devex 中的 WPF 中不完全支持它。 正如我所说,devex 在没有 RTL 的 WinApp 中更好。
【讨论】:
【参考方案10】:在我看来,DevExpress 提供了一些与 Telerik 相比的轻量级控件。使用 DevExpress 的报告更加灵活。但与此同时,Telerik 与其他工具相比具有更好的外观和感觉。
【讨论】:
【参考方案11】:我有一个使用 Telerik 控件的朋友,他绝对相信它们。他特别提到了他们的数据网格控制是自切片面包以来最伟大的事情并且一直在使用(根据您的第一个要点,这可能会对您有所帮助)。
再说一次,不是第一手经验,但我相信他对这类事情的看法。
【讨论】:
【参考方案12】:没有尝试过 DevExpress,但我使用 Telerik for WPF,它有一些很好的组件,例如 Gridview。但是其他组件充满了错误,例如一个简单的dockcontrol,直到今天他们还没有设法让它正常工作。
【讨论】:
【参考方案13】:我使用了 Telerik wpf radcontrols 和 devexpress !根据我的经验,我对 Telerik 控件感到满意,因为我的主要目标是提高生产力并在短时间内交付具有良好 UX 的桌面应用程序! Telerik 大量使用 mvvm 模式并推荐使用它,因为他们的大多数演示都基于它!至于查看演示源代码的文档,足以让我快速入门!另一方面,devexpress 更加成熟。换句话说,telerik 包含错误,但如果您提出要求,支持人员总会为您找到解决方法。
【讨论】:
以上是关于如何修改DevExpress WPF控件的主题的主要内容,如果未能解决你的问题,请参考以下文章
新建WPF应用程序 使用DevExpress 控件 如何修改控件皮肤?
WPF DevExpress设置GridControl TableView行颜色,