我有一个用于实现 INotifyPropertyChanged 的类的 DataTemplate。当属性更改并且不同值的不同故事板(在这种情况下为布尔值)时,有什么方法可以触发故事板?
有什么方法可以根据数据模板所针对的类的值在启动时触发情节提要?
我有一个用于实现 INotifyPropertyChanged 的类的 DataTemplate。当属性更改并且不同值的不同故事板(在这种情况下为布尔值)时,有什么方法可以触发故事板?
有什么方法可以根据数据模板所针对的类的值在启动时触发情节提要?
是的,你可以这么做。
添加一个 DataTrigger 并绑定到相应的属性。这是一个例子:
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=MyProperty}" Value="True">
<BeginStoryboard Storyboard="{StaticResource myStoryboard}"/>
</DataTrigger>
</DataTemplate.Triggers>
您可以将要测试的值设置为您想要的任何内容。因此,您可以将故事板设置为在您的值更改为 false 时开始。您可以根据需要添加任意数量的 DataTrigger(或其他触发器)。
请注意,在我的示例中,我引用了一个虚拟属性和情节提要。
当属性更改时,绑定将被更新并会因为数据绑定而触发触发器。
这种技术也应该在启动时起作用。
与上面的海报类似,我也使用了一个 DataTrigger,然后将它绑定到我的 ViewModel 中的一个属性。我发现令人困惑的一件事是数据触发器的放置位置。我直接放在根节点(即Window)。我使用 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));
}
}
最后,Viewmodel 必须继承自“INotifyPropertyChanged”