1

AlternationCount が 2 に設定された ListView があります。現在 ListViewItem の背景色を交互の色に設定している ListViewItem スタイルがあり、次の場合に ColorAnimation をトリガーして赤と白の間の色をアニメーション化する 3 番目のトリガーを追加したいと考えています。バインドされた ViewModel のプロパティは true です (この場合、"Locked" と呼ばれるプロパティ)。

この投稿に出くわし、下部にある xaml を試しました。

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/e7897cbd-71d9-45e6-9b17-0cd5bde5859f

しかし、アイテムをマウスオーバーまたは選択してから、別のアイテムを選択またはマウスオーバーするまで、アニメーションはトリガーされないように見えます。最初の 2 つの MultiDataTriggers から交互の色を取得しますが、アイテムがコレクションに追加されたときにアニメーションがトリガーされません。ここに私のXAMLがあります:

    <Style x:Key="alternatingListViewItemStyle" TargetType="{x:Type ListViewItem}">
        <Setter Property="Background" Value="White" />
        <Style.Triggers>
            <MultiDataTrigger >
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=(ItemsControl.AlternationIndex)}" Value="0" />
                    <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=(ListViewItem.IsSelected)}" Value="False" />
                    <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=(Panel.IsMouseOver)}" Value="False" />
                    <Condition Binding="{Binding Locked}" Value="False" />
                </MultiDataTrigger.Conditions>
                <Setter Property="Background" Value="DarkGray" />
                </MultiDataTrigger>
            <MultiDataTrigger >
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=(ItemsControl.AlternationIndex)}" Value="1" />
                    <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=(ListViewItem.IsSelected)}" Value="False" />
                    <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=(Panel.IsMouseOver)}" Value="False" />
                    <Condition Binding="{Binding Locked}" Value="False" />
                </MultiDataTrigger.Conditions>
                <Setter Property="Background" Value="SlateGray" />
                </MultiDataTrigger>
            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=(ListViewItem.IsSelected)}" 
                                         Value="False" />
                    <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=(Panel.IsMouseOver)}" 
                                         Value="False" />
                    <Condition Binding="{Binding Locked}" 
                                         Value="True" />
                </MultiDataTrigger.Conditions>
                <MultiDataTrigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <ColorAnimation
                                Storyboard.TargetProperty="(Control.Background).(SolidColorBrush.Color)"
                                From="Red" To="White" Duration="0:0:0.2"
                                AutoReverse="True" RepeatBehavior="Forever" />
                        </Storyboard>
                    </BeginStoryboard>
                </MultiDataTrigger.EnterActions>
            </MultiDataTrigger>
        </Style.Triggers>
    </Style>
4

1 に答える 1

2

例の特定の構文はありませんが、トリガーを (リソースではなく) ListView に直接配置し、Syle ではなく ListView.ItemContainerStyle を使用してみてください。以下の単純なコードを Resouces で機能させることはできませんでしたが、ListView に直接移動すると機能しました。リソースにあるときにおそらく構文エラーが発生しました。

    <ListView AlternationCount="2"
              ItemsSource="{Binding Path=...}">
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Style.Triggers>
                    <!-- setting up triggers for alternate background colors -->
                    <Trigger Property="ItemsControl.AlternationIndex" Value="1">
                        <Setter Property="Background" Value="Gainsboro"></Setter>
                    </Trigger>
                    <Trigger Property="ItemsControl.AlternationIndex" Value="2">
                        <Setter Property="Background" Value="White"></Setter>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ListView.ItemContainerStyle>
    <ListView.View>
于 2011-04-28T15:28:00.187 に答える