好行爲是基於你的招投標工作的精細完美...
你有兩個選擇......
保持你的代碼,因爲它是,每當喜好變化請致電DataGrid.Items.Refresh()
或重新綁定DataGrid.ItemsSource
屬性以重新生成DataGridRows
。這樣,他們將採取改變偏好的效果(即bg和fg顏色會刷新)。
更好的方法是通過Triggers
修補你的邏輯使用基於DynamicResources
Brushes
轉色DataGridRows
假設MsgType
的值是有限&在編譯時衆所周知的......
例如
假設你MsgType
是因此被它代表值的數量方面也定義了一些枚舉....
public enum MsgType
{
None = 0,
Read = 1,
Edit = 2,
Delete = 3
}
XAML
<DataGrid.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="MyDefaultPreferences.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</DataGrid.Resources>
...
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter property="BackgroundColor" Value="{DynamicResource NoneMsgTypeBrush}" />
<Style.Triggers>
<DataTrigger Binding="{Binding MsgType}" Value="1">
<Setter Property="BackgroundColor" Value="{DynamicResource ReadMsgTypeBrush}" />
</DataTrigger>
<DataTrigger Binding="{Binding MsgType}" Value="2">
<Setter Property="BackgroundColor" Value="{DynamicResource EditMsgTypeBrush}" />
</DataTrigger>
<DataTrigger Binding="{Binding MsgType}" Value="3">
<Setter Property="BackgroundColor" Value="{DynamicResource DeleteMsgTypeBrush}" />
</DataTrigger>
</Style.Triggers>
</Style>
MyDefaultPreferences.xaml
看起來像下面...
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<SolidColorBrush x:Key="NoneMsgTypeBrush" Color="White"/>
<SolidColorBrush x:Key="ReadMsgTypeBrush" Color="Gray"/>
<SolidColorBrush x:Key="EditMsgTypeBrush" Color="Green"/>
<SolidColorBrush x:Key="DeleteMsgTypeBrush" Color="Red"/> </ResourceDictionary>
所以你必須在運行時做的,當用戶改變偏好設置,只需取出後用相同的密鑰在MyDefaultPreferences.xaml
添加Brushes
(它的一個Dictionary
)...
例如
如果用戶改變閱讀消息類型是黃色的,你必須做這個...
Uri uri = new Uri("MyDefaultPreferences.xaml", UriKind.RelativeOrAbsolute);
var _myDefaultResourceDictionary = Application.LoadComponent(uri) as ResourceDictionary;
_myDefaultResourceDictionary.Remove("ReadMsgTypeBrush");
_myDefaultResourceDictionary.Add("ReadMsgTypeBrush", new SolidColorBrush(Colors.Yellow));
這種刪除和添加一個刷機資源,改變無論它是通過DynamicResource
稱爲顏色(即在相應的SolidColorBrush
中)。
這是改變皮膚\在運行時的WPF應用主題的一個非常普遍的方式。
謝謝WPF的話,作爲一個快速的解決方案,我已經使用Items.Refresh()解決方案,並能正常工作。我會稍微更改代碼以使用DynamicResources,以便正確完成。非常感謝您的快速回復。 –