1

私は ac# ビジネス アプリケーションを持っています (まだ .net 4.0 をターゲットにしています)。.net 4.5 をインストールした後、データグリッド行の非アクティブな前景色が変更されました。(私は再コンパイルしませんでしたが、同じバイナリを実行しています)

前景色のコントラスト色の計算を変更したようです。

いくつかの詳細。Datagrid は次のように定義されます。

<DataGrid Background="White" AlternatingRowBackground="WhiteSmoke" ... />

また、そのように Datagrid のグローバル スタイルを定義しました。

<Style TargetType="{x:Type DataGrid}">
    <Style.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{DynamicResource ItemSelectedFocusedColor}"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{DynamicResource ItemSelectedFocusedColor}"/>
    </Style.Resources>
</Style>

色:<Color x:Key="ItemSelectedFocusedColor">#88087ED1</Color>

.net 4 がインストールされた状態でアプリを実行すると、フォーカスされていない Datagrid 行の前景色Whiteなります。.net 4.5 がインストールされた状態でアプリを実行すると、フォーカスされていない Datagrid 行の前景色Blackなります。

データグリッドにフォーカスがある場合、動作は同じです。(両方のバージョンで白)

私にとって、これはインプレース更新の重大な変更です。インストールされているバージョンに関係なく、すべてのクライアントでまったく同じユーザー エクスペリエンスが得られるはずです。

また、 MSDN .net 4.5 Application Compatibilityでこの問題に関する情報を見つけることができません。

4

2 に答える 2

2

DataGrid および DataGridRow コントロール テンプレートは、.NET4.0 バージョンと .NET4.5 バージョンの間で変更されました。選択とフォーカスに基づいて色を変更するトリガーは、同じ SystemColors を使用しなくなりました。

これが、xaml で SystemColors をオーバーライドして選択色を変更することは、良い方法ではありますが、良い方法ではない理由です。

コントロール テンプレート/スタイルをオーバーライドして、独自のブラシで動作させる必要があります。そうすれば、Microsoft が組み込みのテンプレートを変更することを決定した場合でも、コードは影響を受けません。

于 2012-11-16T12:15:43.743 に答える
0

@Sisypheの推奨どおりに実行することも、「チート」を続けることもできます。Style.Resources同じ問題を修正するために、これをリストに追加する必要がありました

<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="{x:Static SystemColors.HighlightColor}"/>

https://stackoverflow.com/a/13053511/1811110を参照してください。

于 2013-07-18T23:19:53.130 に答える