我正在开发一个使用内部WPF用户控件的WinForms应用程序。其中一个包含WPF DataGrid,我可以根据它运行的操作系统以不同的样式看到它。
在Win7 / Win8中,我看到它的方式相同(Win 8中的上下文菜单选项比Win 7中更高),但在Windows Server 2008中,它似乎在标题行中使用了完全不同的ui样式。 / p>
Windows 8:
Windows server 2008:
在网上搜索一下之后,它似乎使用了不同的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>
选定的行(确定):
右键单击行(错误):
在Windows Server 2008中使用导致颜色不佳的样式的右键单击行(黑色字符而不是白色 - &gt;我想保留白色字符):
您是否知道使用数据网格样式获取所需内容的方式?
答案 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)
我意识到不仅标题会受到干扰,还会出现上下文菜单。
不是逐个元素地设置特定样式,而是根据操作系统应用它们,是否可以告诉WPF&#34;尝试为每个组件使用Aero样式!&#34; ???
PS:我检查了不同操作系统上的版本:
所以在Win 2008和Win 7上是一样的!! :(