Проблема установки переднего плана DataGridRow в Silverlight - PullRequest
1 голос
/ 28 апреля 2011

У меня есть простая задача Silverlight:

Отображение списка объектов-поставщиков в DataGrid.Если поставщик «деактивирован» (на что указывает свойство поставщика IsDeactivation ), отобразите значок руки и установите цвет переднего плана на серый.В противном случае установите цвет переднего плана на синий.
Строка должна выглядеть примерно так:

enter image description here

Указанные столбцы являются столбцами шаблона, как показано здесь:

            <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, значок руки невидим - при необходимости - однако цвет переднего плана все еще остается серым:

enter image description here

Я уже пытался решить эту проблемуделая подход Converter или PropertyChangeTrigger , однако это переписывает пользовательские стили VisualState, установленные для MouseOver или Selected .

Я слышал, что это может быть как-то связано с DataGrid Virtualization ?

У кого-нибудь есть идеи, как решить проблему?

1 Ответ

2 голосов
/ 28 апреля 2011

Если вам не нужна виртуализация попробуй это https://leeontech.wordpress.com/2011/04/12/datagrid-random-behavior-when-scrolling/

...