2012-11-16 34 views
1

我有一個C#業務應用(目標仍然.NET 4.0)。在安裝.net 4.5之後,datagrid行的非活動前景色發生了變化。 (我沒有重新編譯,仍然執行相同的二進制文件).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行的前景文本顏色爲白色。 安裝.net 4.5執行應用程序時,未聚焦的前景文本顏色 Datagrid行是黑色

如果DataGrid有重點,行爲是相同的。 (兩個版本均爲白色)

對我來說,這是一個原地更新的重大更改。我的所有客戶都應該獲得完全相同的用戶體驗,而不受安裝版本的影響。

我還不能找到有關這個問題上MSDN .net 4.5 Application Compatibility

+0

我想幫助。你可以給我發送代碼,在Microsoft dot com的netfx45compat上重現問題嗎?你能否確認,代碼工作正常在.NET4.5和Windows7,但你看到的問題與.NET4.5和Windows8的?問候,Varun Gupta,.NET Framework兼容團隊 – Varun

+0

我仍然在Windows 7上執行**相同的二進制文件**。首先,安裝.net 4.0,然後安裝.net 4.5。在Windows 8上沒有試過它,即使這不是重點。無論如何,我是否應該向您發送代碼? – Christian

回答

2

DataGrid和DataGridRow控件模板的任何信息已.NET4.0和.NET4.5版本之間改變。量變到質變基礎上選擇觸發負責色彩和重點不再使用相同systemColors中。

這就是爲什麼在xaml中重寫SystemColors來改變選擇顏色,即使是一個很好的技巧,也不是一個好的做法。

您應該重寫控件模板/樣式以使它們可以用您自己的畫筆工作。這樣,即使微軟決定改變他們內置的模板,你的代碼也不會受到影響。

+0

這可能是。儘管如此,這種新行爲不適用於就地更新。微軟無法期望我能覆蓋應用程序中使用的每個控件的控件模板。如果我這樣做,我將不得不復制.net 4.0框架代碼... – Christian

+0

而事實上,我改變了選擇的顏色,但我從來沒有設置前景色。所以看起來,他們改變了底色的顏色計算代碼。所以這可能與模板中的觸發器無關。 – Christian

+0

這也可能改變了前景計算。其實我同意一件事,很奇怪他們沒有在所有ItemsControl中爲選擇顏色提供一個簡單的入口點。在應用程序中重寫這種事情是非常普遍的事情。這就是說,重寫ControlTemplate/Style並不難;) – Sisyphe

0

您可以按照@Sisyphe的建議來做,或者您可以繼續'欺騙'! 我們必須把它添加到列表Style.Resources解決同樣的問題

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

https://stackoverflow.com/a/13053511/1811110