プロパティのWPFストーリーボードトリガーが変更されました
-
06-07-2019 - |
質問
INotifyPropertyChangedを実装するクラス用のDataTemplateがあります。プロパティが変更され、異なる値の異なるストーリーボード(この場合はbool)が発生したときにストーリーボードをトリガーする方法はありますか?
そして、datatemplateが作成されるクラスの値に応じて、起動時にストーリーボードをトリガーする方法はありますか?
解決
はい、できます。
DataTriggerを追加し、それぞれのプロパティにバインドします。次に例を示します。
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=MyProperty}" Value="True">
<BeginStoryboard Storyboard="{StaticResource myStoryboard}"/>
</DataTrigger>
</DataTemplate.Triggers>
テストする値を任意の値に設定できます。したがって、値がfalseに変更されたときに開始するようにストーリーボードを設定できます。必要な数のDataTrigger(または他のトリガー)を追加できます。
この例では、ダミーのプロパティとストーリーボードを参照していることに注意してください。
プロパティが変更されると、バインディングが更新され、データバインディングのためにトリガーが起動されます。
この手法は起動時にも機能するはずです。
他のヒント
上記のポスターと同様に、DataTriggerも使用し、それをViewModelのプロパティにバインドしました。紛らわしいのは、データトリガーを配置する場所です。ルートノード(つまり、ウィンドウ)に直接配置します。 Expression Blendを使用して作成し、タグの名前付けの詳細を処理しました。
また、プロジェクトに&quot; Microsoft.Expression.Interactions&quot;への参照を含めるようにしてください
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>
ViewModel:
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));
}
}
最後に、Viewmodelは&quot; INotifyPropertyChanged&quot;から継承する必要があります