10

我遇到了一件相当奇怪的事情,我DataGrid在 WPF XMAL 页面中定义了一个声明,其中声明了以下内容:

<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 并且它只是在它看到时更改目标框架有些东西正在使用它(尽管我非常怀疑)。或者是否有可能 Inactive 类型在 .net 4 中,但未在文档中列为受支持,而只是在 VS 中导致此问题?

在 .net 4 中是否有更好的方法来允许我设置 DataGrid 行的非活动选择颜色?或者是升级到 .net 4.5 的唯一方法?

4

2 回答 2

17

Visual Studio 会构建一个程序集,即使它的目标设置为 .NET FW 4.0 并且您InactiveSelectionHighlightBrushKey在 XAML 代码中使用。此程序集将在具有 .NET FW 4.5 的系统中正确执行。但是如果系统只有.NET FW 4.0,当系统创建用户控件时会抛出异常InactiveSelectionHighlightBrushKey

因此,您不能使用InactiveSelectionHighlightBrushKey目标设置为 FW 4.0 的 in 程序集,因为它们无法在只有 .NET FW 4.0 的系统中工作。

LostFocus/LostKeyboardFocus/GotFocus要同时支持 FW 4.0 和 FW 4.5,您可以在事件处理程序中设置所选行的颜色。请参阅示例代码https://stackoverflow.com/a/8095932/1815957

于 2012-12-11T20:27:47.400 回答
11

如果您不想使用后面的代码,那么可以替代InactiveSelectionHighlightBrushKey is 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>
于 2013-01-21T00:16:30.533 回答