2009-04-03 9 views
1

Ich arbeite mit dem WPF Toolkit Datagrid und haben eine Spalte, die mit Umschaltflächen gefüllt ist. Unter Verwendung des folgenden Stils ändere ich die Hintergrundfarbe, wenn die Umschalttaste ausgewählt ist und auch mit der Maus über. Leider, wenn ich Virtualisierung aktivieren, wenn ich eine Umschalttaste in einer Zelle auswählen und im Raster nach unten scrollen, finde ich andere Zellen, deren Hintergrund ebenfalls geändert wurde. Ich nehme an, das ist ein Fehler in der Art und Weise, in der die Virtualisierung die Zellen beim Scrollen wiederverwendet. Irgendwelche Vorschläge, um das zu umgehen und trotzdem Virtualisierung zu nutzen?Wpf Datagrid Virtualisierung Problem beim Einstellen der Zellenfarben

   <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> 

Antwort

0

Ich habe in der Lage gewesen, um das Problem zu erhalten, indem die IsChecked Eigenschaft der ToggleButton Bindung, die der Stil zielt. Dadurch kann ich die Virtualisierung aktivieren und die Hintergrundfarbe für die Vorlage-Umschaltfläche in jeder Zelle richtig synchron mit dem beibehalten, was sie sein sollte.

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