2009-04-03 6 views
1

Я работаю с datagrid инструментария wpf и располагаю колонку, заполненную переключающими кнопками. Используя стиль ниже, я меняю цвет фона, если выбрана кнопка переключения, а также при наведении мыши. К сожалению, если у меня есть возможность виртуализации, когда я делаю выбор кнопки переключения в ячейке и прокручиваю вниз в сетке, я найду другие ячейки, у которых также был изменен их фон. Я предполагаю, что это ошибка в том, как виртуализация повторно использует ячейки при прокрутке. Любое предложение обойти это и по-прежнему использовать виртуализацию?Ошибка виртуализации Wpf Datagrid при настройке цветов ячеек

   <Style TargetType="{x:Type ToggleButton}"> 
       <Setter Property="Control.Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type ToggleButton}"> 
           <TextBlock x:Name="Tb" Tag="{TemplateBinding Property=Tag}" Padding="{TemplateBinding Property=Padding}" Text="{TemplateBinding Property=Content}" > 
           </TextBlock> 
          <ControlTemplate.Triggers> 
           <Trigger Property="IsMouseOver" Value="True"> 
            <Setter TargetName="Tb" Property="Background" Value="{StaticResource HoverRed}" /> 
           </Trigger> 
           <Trigger Property="IsChecked" Value="True"> 
            <Setter TargetName="Tb" Property="Background" Value="{StaticResource SelectYellow}" /> 
           </Trigger> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 

ответ

0

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

    <ToggleButton Tag="button" IsChecked="{Binding Path=Selected,Mode=TwoWay}" FocusVisualStyle="{x:Null}" Content="{Binding Path=MarkerName,Mode=OneWay}"> 
       </ToggleButton>