我遇到了一个相当离奇的事情,我在WPF XMAL页面中定义了DataGrid
,声明了以下内容:
<DataGrid.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#FF3399FF" />
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="White" />
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="#FF3399FF"/>
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}" Color="White" />
</DataGrid.Resources>
从技术上讲,两个Inactive
SystemColors
类型来自.net 4.5,但是当我将它设置为目标.net 4时,我可以编译该程序,并且这些非活动画笔可以工作,但是当它设置为目标时.net 4在Visual Studio中加载XMAL设计器页面会抛出错误The member "InactiveSelectionHighlightTextBrushKey" is not recognized or is not accessible.
,然后阻止设计器视图。但它仍然按照程序中的定义进行编译和显示。
至少可以说这看起来非常不一致,我无法判断这是否是Visual Studio 2012问题,或者它是否允许程序编译,因为我的开发计算机安装了.net 4.5并且它只是在更改目标框架时它看到某些东西正在使用它(我非常怀疑这一点)。或者,非活动类型是否可能在.net 4中,但未在文档中列出,并且仅在VS中导致此问题?
有没有更好的方法在.net 4中执行此操作以允许我设置DataGrid行的非活动选择颜色?或者这是升级到.net 4.5的唯一方法吗?
答案 0 :(得分:17)
Visual Studio构建一个程序集,即使其目标设置为.NET FW 4.0并且您在XAML代码中使用InactiveSelectionHighlightBrushKey
。此程序集将在具有.NET FW 4.5的系统中正确执行。但是,如果系统只有 .NET FW 4.0,则当系统使用InactiveSelectionHighlightBrushKey
创建用户控件时,将抛出异常。
所以你不能在目标设置为FW 4.0的程序集中使用InactiveSelectionHighlightBrushKey
,因为它们不能在只有.NET FW 4.0的系统中工作。
要支持FW 4.0和FW 4.5,您可以在LostFocus/LostKeyboardFocus/GotFocus
个事件的处理程序中设置所选行的颜色。请参阅示例代码https://stackoverflow.com/a/8095932/1815957
答案 1 :(得分:11)
如果您不想使用代码,那么InactiveSelectionHighlightBrushKey
的替代方法是ControlBrushKey
。以下对我有用:
<Style x:Key="ReadOnlyDataGrid" TargetType="{x:Type DataGrid}">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightGreen"/>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"/>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="LightGreen"/>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black"/>
</Style.Resources>
</Style>