【发布时间】:2015-04-04 08:18:35
【问题描述】:
我正在开发一个在内部使用一些 WPF 用户控件的 WinForms 应用程序。其中一个包含 WPF DataGrid,我可以根据其运行的操作系统以不同的样式查看它。
在 Win7/Win8 中,我看到它的方式相同(Win 8 中的上下文菜单选项比 Win 7 中的高度更高),但在 Windows Server 2008 中,它似乎在标题行中使用了完全不同的 ui 样式。
Windows 8:
Windows 服务器 2008:
在网上搜索了一下,好像是用不同的UI来源。我尝试手动放置黑色前景的白色背景,但它失去了“渐变”样式,我不喜欢创建整个手动样式的想法。
有什么帮助吗?
/////////////////////////////////////// //////////////////////
//////////////////// 已更新 ///////////// /////////
/////////////////////////////////////// //////////////////////
我拆分了问题并创建了一个具有最简单数据网格的 exe(一列和一个上下文菜单项)。当我在 Windows server 2008 中运行 exe 时颜色正常,这真是令人惊讶!!!
最后,我最终找到了导致显示丑陋蓝色的原因。当在一行上按下鼠标右键时,我使用它来强制数据网格保持“蓝色”。如果我不使用这种样式,当我右键单击它时,该行将显示为灰色。
<Style x:Key="DataGridStyle1" TargetType="{x:Type DataGrid}">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{DynamicResource {x:Static SystemColors.HighlightColorKey}}" />
</Style.Resources>
</Style>
选定的行(确定):
右击行(坏):
在 Windows Server 2008 中右键单击的行带有导致颜色不佳的样式(黑色字符而不是白色 --> 我想保留白色字符):
你知道如何使用数据网格样式来获得我需要的东西吗?
【问题讨论】:
-
你可能会在this thread找到一些有用的信息
-
如何只为 Windows Server 创建一个样式并在检查 Environment.OSVersion 后应用它?
-
@GordonTrue,你告诉我的线程包含在 Windows 服务器上启用 Windows 用户体验的指南。在我的机器上解决问题会很好,但当我在 500 台客户端机器上安装应用程序时就不值得了。我不想依赖客户端:(
-
@NadiaCibrikova 嗯,很有趣,但我对那个属性有点困惑。对于 win8 机器,属性值为“Microsoft Windows NT 6.2.9200.0”,对于 server2008,其值为“Microsoft Windows NT 6.1.7601 Service Pack 1”。我认为依赖字符串比较不是一个好习惯。你如何检查我是否在 win 服务器上运行??
标签: c# wpf winforms datagrid styles