1

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

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

1 に答える 1

0

スタイルが対象としているトグルボタンの IsChecked プロパティをバインドすることで、この問題を回避できました。これにより、仮想化を有効にして、各セルのテンプレート化されたトグル ボタンの背景色を適切に同期させることができます。

                    <ToggleButton Tag="button" IsChecked="{Binding Path=Selected,Mode=TwoWay}" FocusVisualStyle="{x:Null}" Content="{Binding Path=MarkerName,Mode=OneWay}">
                </ToggleButton>
于 2009-04-03T20:07:07.383 に答える