INotifyPropertyChanged を実装するクラス用の DataTemplate があります。プロパティが変更されたときにストーリーボードをトリガーし、異なる値で別のストーリーボードをトリガーする方法はありますか (この場合はブール値)?
データテンプレートが作成されたクラスの値に応じて、起動時にストーリーボードをトリガーする方法はありますか?
INotifyPropertyChanged を実装するクラス用の DataTemplate があります。プロパティが変更されたときにストーリーボードをトリガーし、異なる値で別のストーリーボードをトリガーする方法はありますか (この場合はブール値)?
データテンプレートが作成されたクラスの値に応じて、起動時にストーリーボードをトリガーする方法はありますか?
はい、できます。
DataTrigger を追加し、それぞれのプロパティにバインドします。次に例を示します。
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=MyProperty}" Value="True">
<BeginStoryboard Storyboard="{StaticResource myStoryboard}"/>
</DataTrigger>
</DataTemplate.Triggers>
テストする値は、任意のものに設定できます。したがって、値が false に変更されたときにストーリーボードが開始するように設定できます。必要な数の DataTriggers (または他のトリガー) を追加できます。
この例では、ダミーのプロパティとストーリーボードを参照していることに注意してください。
プロパティが変更されると、バインディングが更新され、データバインディングのためにトリガーが起動されます。
この手法は、起動時にも機能するはずです。
上記のポスターと同様に、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」から継承する必要があります