4

INotifyPropertyChanged を実装するクラス用の DataTemplate があります。プロパティが変更されたときにストーリーボードをトリガーし、異なる値で別のストーリーボードをトリガーする方法はありますか (この場合はブール値)?

データテンプレートが作成されたクラスの値に応じて、起動時にストーリーボードをトリガーする方法はありますか?

4

2 に答える 2

7

はい、できます。

DataTrigger を追加し、それぞれのプロパティにバインドします。次に例を示します。

<DataTemplate.Triggers>
    <DataTrigger Binding="{Binding Path=MyProperty}" Value="True">
        <BeginStoryboard Storyboard="{StaticResource myStoryboard}"/>
    </DataTrigger>
</DataTemplate.Triggers>

テストする値は、任意のものに設定できます。したがって、値が false に変更されたときにストーリーボードが開始するように設定できます。必要な数の DataTriggers (または他のトリガー) を追加できます。

この例では、ダミーのプロパティとストーリーボードを参照していることに注意してください。

プロパティが変更されると、バインディングが更新され、データバインディングのためにトリガーが起動されます。

この手法は、起動時にも機能するはずです。

于 2009-03-09T16:05:52.700 に答える
2

上記のポスターと同様に、DataTrigger も使用し、それを ViewModel のプロパティにバインドしました。わかりにくいと思ったのは、データ トリガーをどこに置くかということでした。ルート ノード (つまり、ウィンドウ) に直接配置します。タグの命名の詳細を処理してくれる Expression Blend を使用して作成しました。

また、必ずプロジェクトに "Microsoft.Expression.Interactions" への参照を含めてください。

XAML: (これはルート ノードに直接入ります)

<Window
   xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
   xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" 
   x:Name="window" >

    ...

    <i:Interaction.Triggers>
      <ei:DataTrigger Binding="{Binding FlashingBackground, Mode=OneWay}" Value="ON">
        <ei:ControlStoryboardAction Storyboard="{StaticResource MyAnimation}"     
                                                ControlStoryboardOption="Play"/>
      </ei:DataTrigger>
    </i:Interaction.Triggers>

    ...
</Window>

ビューモデル:

 private void TurnOnFlashingBackround()
    {
        FlashingBackground = "ON";
    }

    private string _FlashingBackround = "OFF";

    public string FlashingBackground
    {
        get { return _FlashingBackround; }

        private set
        {
            if (FlashingBackground == value)
            {
                return;
            }

            _FlashingBackround = value;
            this.OnPropertyChanged("FlashingBackground");
        }
    }

    public new event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

最後に、ビューモデルは「INotifyPropertyChanged」から継承する必要があります

于 2011-05-12T16:28:12.097 に答える