У меня есть простая задача Silverlight:
Отображение списка объектов-поставщиков в DataGrid.Если поставщик «деактивирован» (на что указывает свойство поставщика IsDeactivation ), отобразите значок руки и установите цвет переднего плана на серый.В противном случае установите цвет переднего плана на синий.
Строка должна выглядеть примерно так:
Указанные столбцы являются столбцами шаблона, как показано здесь:
<sdk:DataGridTemplateColumn IsReadOnly="True">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Padding="3" Text="{Binding City}" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
Чтобы установить цвет переднего плана после назначения источника данных, я реализовал события LoadingRow и UndloadingRow :
private void LoadingDataGridRow(object sender, DataGridRowEventArgs e)
{
var supplier = (Supplier)e.Row.DataContext;
e.Row.Foreground = supplier.IsDeactivated ? new SolidColorBrush(Colors.Gray) : new SolidColorBrush(Color.FromArgb(255, 65, 85, 155));
}
private void UnLoadingDataGridRow(object sender, DataGridRowEventArgs e)
{
var supplier = (Supplier)e.Row.DataContext;
e.Row.ClearValue(ForegroundProperty);
}
Однако, когда я теперь изменяю IsDeactivation в значение true, значок руки невидим - при необходимости - однако цвет переднего плана все еще остается серым:
Я уже пытался решить эту проблемуделая подход Converter или PropertyChangeTrigger , однако это переписывает пользовательские стили VisualState, установленные для MouseOver или Selected .
Я слышал, что это может быть как-то связано с DataGrid Virtualization ?
У кого-нибудь есть идеи, как решить проблему?