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>

技術的には、2 つの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 でこの問題を引き起こしている可能性はありますか?

DataGrid 行の非アクティブな選択色を設定できるように、.net 4 でこれを行うより良い方法はありますか? それとも、これを行う唯一の方法は .net 4.5 にアップグレードすることですか?

4

2 に答える 2

17

InactiveSelectionHighlightBrushKeyターゲットが .NET FW 4.0 に設定され、XAML コードで使用されている場合でも、Visual Studio はアセンブリをビルドします。このアセンブリは、.NET FW 4.5 のシステムで正しく実行されます。ただし、システムに.NET FW 4.0 しかない場合、システムが .NETでユーザー コントロールを作成すると、例外がスローされInactiveSelectionHighlightBrushKeyます。

InactiveSelectionHighlightBrushKeyそのため、.NET FW 4.0 のみのシステムでは機能しないため、FW 4.0 に設定されたターゲットで in アセンブリを使用することはできません。

FW 4.0 と FW 4.5 の両方をサポートするために、LostFocus/LostKeyboardFocus/GotFocusイベント ハンドラーで選択した行の色を設定できます。サンプル コードを参照してください https://stackoverflow.com/a/8095932/1815957

于 2012-12-11T20:27:47.400 に答える
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>
于 2013-01-21T00:16:30.533 に答える