在WPF中,我可以在网页(或父控件)中创建一个故事板作为页/控制资源,然后将其用于控制多次...UWP:共享一个故事板
<Grid Background="{DynamicResource CorporateLogoBackgroundBrush}" views:MainWindowHelper.DragWindowOnMouseDown="True">
<Grid.Resources>
<Storyboard x:Key="FlashRedBackgroundStoryboard">
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Duration="0:0:1" RepeatBehavior="Forever">
<ObjectAnimationUsingKeyFrames.KeyFrames>
<DiscreteObjectKeyFrame KeyTime="0:0:0.5">
<DiscreteObjectKeyFrame.Value>
<SolidColorBrush Color="Red" />
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames.KeyFrames>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</Grid.Resources>
<Border Grid.Column="4" BorderThickness="0">
<Border.Style>
<Style TargetType="{x:Type Border}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsNetworkConnectivityOk}" Value="false">
<DataTrigger.EnterActions>
<BeginStoryboard Name="FlashRedBackgroundStoryboard">
<StaticResource ResourceKey="FlashRedBackgroundStoryboard" />
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<StopStoryboard BeginStoryboardName="FlashRedBackgroundStoryboard"></StopStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<TextBlock Text="LAN/WLAN" />
</Border>
<Border Grid.Column="5" BorderThickness="0">
<Border.Style>
<Style TargetType="{x:Type Border}">
<Setter Property="Background" Value="{DynamicResource CorporateLogoBackgroundBrush}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=SynchronisationClientService.IsActive}" Value="true">
<Setter Property="Background" Value="Green" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=SynchronisationClientService.IsRunning}" Value="false">
<DataTrigger.EnterActions>
<BeginStoryboard Name="FlashRedBackgroundStoryboard">
<StaticResource ResourceKey="FlashRedBackgroundStoryboard" />
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<StopStoryboard BeginStoryboardName="FlashRedBackgroundStoryboard"></StopStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<TextBlock Text="SYNC" />
</Border>
</Grid>
然而,我无法在UWP中找到同样的方法。在WPF中使用DataTrigger和BeginStoryboard自动似乎与Storyboard.TargetName关联,但在UWP中,我必须使用Interactions包,然后尝试将故事板与控件关联起来,方法与故事板不与控件关联的错误相同。 ..
<Grid Background="{StaticResource CorporateBackgroundBrush}">
<Grid.Resources>
<Storyboard x:Key="FlashRedBackgroundStoryboard">
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Duration="0:0:1" RepeatBehavior="Forever">
<ObjectAnimationUsingKeyFrames.KeyFrames>
<DiscreteObjectKeyFrame KeyTime="0:0:0.5">
<DiscreteObjectKeyFrame.Value>
<SolidColorBrush Color="Red" />
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames.KeyFrames>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</Grid.Resources>
<Border Grid.Column="4" BorderThickness="0">
<interactivity:Interaction.Behaviors>
<interactionsCore:DataTriggerBehavior Binding="{Binding IsNetworkConnectivityOk}" ComparisonCondition="Equal" Value="false">
<media:ControlStoryboardAction Storyboard="{StaticResource FlashRedBackgroundStoryboard}" />
</interactionsCore:DataTriggerBehavior>
</interactivity:Interaction.Behaviors>
<TextBlock Text="LAN/WLAN" />
</Border>
<Border Grid.Column="5" BorderThickness="0">
<interactivity:Interaction.Behaviors>
<interactionsCore:DataTriggerBehavior Binding="{Binding IsNetworkConnectivityOk}" ComparisonCondition="Equal" Value="false">
<media:ControlStoryboardAction Storyboard="{StaticResource FlashRedBackgroundStoryboard}" />
</interactionsCore:DataTriggerBehavior>
</interactivity:Interaction.Behaviors>
<TextBlock Text="SYNC" />
</Border>
</Grid>
我能找到这样做的UWP的唯一方法就是与每一个具有控制它会影响一个参考多个相同的故事板。
<Grid Background="{StaticResource CorporateBackgroundBrush}">
<Grid.Resources>
<Storyboard x:Name="NetworkConnectivityStoryboard">
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="NetworkConnectivityBorder" Storyboard.TargetProperty="Background" Duration="0:0:1" RepeatBehavior="Forever">
<ObjectAnimationUsingKeyFrames.KeyFrames>
<DiscreteObjectKeyFrame KeyTime="0:0:0.5">
<DiscreteObjectKeyFrame.Value>
<SolidColorBrush Color="Red" />
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames.KeyFrames>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Name="SynchronisationStatusStoryboard">
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="SynchronisationStatusBorder" Storyboard.TargetProperty="Background" Duration="0:0:1" RepeatBehavior="Forever">
<ObjectAnimationUsingKeyFrames.KeyFrames>
<DiscreteObjectKeyFrame KeyTime="0:0:0.5">
<DiscreteObjectKeyFrame.Value>
<SolidColorBrush Color="Red" />
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames.KeyFrames>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</Grid.Resources>
<Border x:Name="NetworkConnectivityBorder" Grid.Column="4" BorderThickness="0">
<interactivity:Interaction.Behaviors>
<interactionsCore:DataTriggerBehavior Binding="{Binding IsNetworkConnectivityOk}" ComparisonCondition="Equal" Value="false">
<media:ControlStoryboardAction Storyboard="{StaticResource NetworkConnectivityStoryboard}" />
</interactionsCore:DataTriggerBehavior>
</interactivity:Interaction.Behaviors>
<TextBlock Text="LAN/WLAN" />
</Border>
<Border x:Name="SynchronisationStatusBorder" Grid.Column="5" BorderThickness="0">
<interactivity:Interaction.Behaviors>
<interactionsCore:DataTriggerBehavior Binding="{Binding IsSynchronisingk}" ComparisonCondition="Equal" Value="false">
<media:ControlStoryboardAction Storyboard="{StaticResource SynchronisationStatusStoryboard}" />
</interactionsCore:DataTriggerBehavior>
</interactivity:Interaction.Behaviors>
<TextBlock Text="SYNC" />
</Border>
</Grid>
有没有办法,我可以分享一个故事板,以便它可以对多个控件使用(在这种特定情况下的一种方式,它是一个状态栏和某些元素需要刷新的时候相关的视图模型属性都有一个特定的值。我不敢相信,我居然要创建多个重复的对象来实现这一目标。
感谢。