2009-04-03 14 views
1

私はwpfツールキットのデータグリッドを使用していて、トグルボタンが設定された列を持っています。以下のスタイルを使用して、トグルボタンが選択されている場合は背景色を変更し、マウスオーバーの場合は背景色を変更します。残念ながら、仮想化が有効になっている場合、セル内のトグルボタンを選択してグリッド内をスクロールすると、背景が変更された他のセルが見つかることになります。これは、仮想化がスクロールしながらどのようにセルを再利用しているかのバグだと思う。これを回避しても仮想化を使用するための提案はありますか?Wpf Datagrid Virtualizationセルの色を設定するときの問題

   <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 Tag="button" IsChecked="{Binding Path=Selected,Mode=TwoWay}" FocusVisualStyle="{x:Null}" Content="{Binding Path=MarkerName,Mode=OneWay}"> 
       </ToggleButton> 
関連する問題