Неожиданное поведение AlternativeRow BackColor в WPF

Я оформляю свой DataGrid, используя стиль, предоставленный Microsoft по адресу эта страница. Я не меняю этот стиль, за исключением одной следующей строки, которая включает альтернативный цвет задней строки.

<!--Style and template for the DataGrid.-->
    <Style TargetType="{x:Type DataGrid}">
        <Setter Property="AlternationCount" Value="2"/>
 ... and the rest of the style

Я понял очень странное поведение этого стиля. Когда вы несколько раз прокручиваете сетку данных вверх/вниз, вы видите, что альтернативный цвет задней строки смешанный! например, следующее изображение:

смешанный альтернативный цвет задней панели

Я ожидаю последовательность строк светлого + темного цвета, что верно до прокрутки; но после прокрутки все случайно перепуталось. Перед применением этого стиля я явно устанавливал альтернативный цвет строки в определении DataGrid, как после этого, я никогда не сталкивался с таким поведением.

<DataGrid ItemsSource="{Binding Source={StaticResource itemsSource}}" AutoGenerateColumns="False" AlternatingRowBackground="#FF58C9FD" RowBackground="#00000000"/> 

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


person Hamed    schedule 16.05.2015    source источник


Ответы (2)


Это известная проблема виртуализации в WPF DataGrid.

Вот обходной путь, но имейте в виду, что это может вызвать серьезные проблемы с производительностью, если вы имеете дело с большими объемами данных в этом DataGrid. .

Существует хорошее объяснение механики такого поведения здесь.

person Gabriel Rainha    schedule 16.05.2015
comment
Да, на самом деле я проверил эту опцию, но потеря производительности довольно серьезная и неприемлемая в моей ситуации. Однако, как я уже упоминал, эта проблема возникает только при использовании стилей, иначе установка свойств непосредственно в определении сетки данных не вызовет таких проблем. - person Hamed; 16.05.2015
comment
Вы случайно не используете неявный стиль для DataGrid в своем проекте? Потому что, если вы это сделаете, попробуйте добавить BasedOn={StaticResource {x:Type DataGrid}} в этот стиль, чтобы он не переопределял любые сделанные вами настройки, которые могли бы заставить его работать без вашего пользовательского стиля. - person Gabriel Rainha; 16.05.2015
comment
При использовании стиля Microsoft или при явном определении свойств в определении сетки данных? - person Hamed; 16.05.2015
comment
Я понял, что вы имеете в виду, но, к сожалению, когда он работает нормально, стиля нет :), просто явное присвоение свойств. - person Hamed; 16.05.2015

Габриэль упомянул, что такое поведение является известной проблемой, которая возникает при попытке создать совершенно новый стиль для сетки данных (или вообще любой коллекции элементов).

Я попытался создать стиль на основе стиля по умолчанию, предложенный Габриэлем, например:

<Style TargetType="{x:Type DataGrid}" BasedOn="{StaticResource {x:Type DataGrid}}">
        <Setter Property="AlternationCount" Value="2"/>
        <Setter Property="AlternatingRowBackground" Value="OrangeRed"/>
 </Style>

Я попытался переопределить все свойства, которые мне нужны, с помощью этого стиля, и он отлично работает. Возможно, в стилях, предоставленных , отсутствует какая-то хитрость или настройка. MSDN (который дублируется в большинстве стилей, найденных в сети), который устраняет эту проблему. Мы по-прежнему ценим, если кто-нибудь обновит нас.

Между тем, я предлагаю переопределить стили по умолчанию вашей настройкой и избегать любых совершенно новых стилей.

person Hamed    schedule 16.05.2015