WPF datagrid根据操作系统的不同风格

时间:2015-02-04 17:30:14

标签: c# wpf winforms datagrid styles

我正在开发一个使用内部WPF用户控件的WinForms应用程序。其中一个包含WPF DataGrid,我可以根据它运行的操作系统以不同的样式看到它。

在Win7 / Win8中,我看到它的方式相同(Win 8中的上下文菜单选项比Win 7中更高),但在Windows Server 2008中,它似乎在标题行中使用了完全不同的ui样式。 / p>

Windows 8:

Running on Windows 8

Windows server 2008:

enter image description here

在网上搜索一下之后,它似乎使用了不同的UI来源。我试图手动放置一个黑色前景的白色背景,但它失去了"渐变"风格,我不喜欢创造一个完整的手工风格的想法。

任何帮助?

/////////////////////////////////////////////// /////////////////////////

//////////////////////// 更新 /////////////// /////////

/////////////////////////////////////////////// /////////////////////////

我分解问题并创建了一个带有最简单数据网格的exe(一列和一个上下文菜单项)。当我在Windows服务器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>

选定的行(确定):

Selected row

右键单击行(错误):

right-clicked row

在Windows Server 2008中使用导致颜色不佳的样式的右键单击行(黑色字符而不是白色 - &gt;我想保留白色字符):

enter image description here

您是否知道使用数据网格样式获取所需内容的方式?

2 个答案:

答案 0 :(得分:1)

您可以使用数字而不是字符串来检查版本:

Version win2008version = new Version(6, 1, 7601, 0);
if(Environment.OSVersion.Version == win2008version ) ...

如果您仍需要确定当前版本,为了区分Win7和Win2008,您可以使用产品编号(Win7为1,Win2008为3)。你可以打电话给GetProductInfo

[System.Runtime.InteropServices.DllImport("Kernel32.dll")]
internal static extern bool GetProductInfo(
int osMajorVersion,
int osMinorVersion,
int spMajorVersion,
int spMinorVersion,
out int ProdunctNum); 

GetProductInfo(
Environment.OSVersion.Version.Major,
Environment.OSVersion.Version.Minor,
0,
0,
out ProdunctNum); 

答案 1 :(得分:0)

我意识到不仅标题会受到干扰,还会出现上下文菜单。

Context menu colors on Windows Server 2008

不是逐个元素地设置特定样式,而是根据操作系统应用它们,是否可以告诉WPF&#34;尝试为每个组件使用Aero样式!&#34; ???

PS:我检查了不同操作系统上的版本:

  • Windows server 2008: 6.1.7601 SP 1
  • Windows 7: 6.1.7601 SP 1
  • Windows 8.1:6.2.9200.0

所以在Win 2008和Win 7上是一样的!! :(

相关问题