开始从后台代码(xaml.cs)故事板,而不是从视图模型MVVM

问题描述:

在WPF我已经设置如下样式边框:开始从后台代码(xaml.cs)故事板,而不是从视图模型MVVM

<Style TargetType="Border" x:Key="BorderBlinking"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding PopupBlinking}" Value="True"> 
      <DataTrigger.EnterActions> 
       <BeginStoryboard> 
        <Storyboard>         
         <DoubleAnimation Storyboard.TargetProperty="Opacity" 
             To="0" AutoReverse="True" Duration="0:0:0.5" SpeedRatio="3" RepeatBehavior="3x" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </DataTrigger.EnterActions> 
      <DataTrigger.ExitActions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation Storyboard.TargetProperty="Opacity" 
             To="1" AutoReverse="True" Duration="0:0:0.5" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </DataTrigger.ExitActions> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

,我重视这样的边界:

<Border Grid.Row="2" x:Name="popup" 
     Style="{StaticResource BorderBlinking}" 
     CornerRadius="10,10,0,0" Height="25" Margin="0" 
     HorizontalAlignment="Center" Width="Auto" 
     VerticalAlignment="Center" 
     BorderBrush="DarkBlue" BorderThickness="1" 
     Background="AntiqueWhite"> 
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center"> 
     <Image Source="Common.Images;component/Images/Info.png" Height="20" Width="20" Stretch="Fill"/> 
     <TextBlock Margin="5" VerticalAlignment="Center" HorizontalAlignment="Left" 
     Background="Transparent" FontSize="12"><Run Text="this is a custom popup"/></TextBlock> 
    </StackPanel> 
</Border> 

然后从我的代码后面(不是视图模型)我想开始故事板。我知道如何通过绑定到数据触发器的属性“PopupBlinking”(如上面的示例)从视图模型启动它,但现在我需要知道如何从代码隐藏(而不是视图模型)启动它。

我已经修改了上面的代码和下面做:

 <Storyboard x:Key="Blink" > 
      <DoubleAnimation Storyboard.TargetProperty="Opacity" 
               To="0" AutoReverse="True" Duration="0:0:0.5" SpeedRatio="3" RepeatBehavior="3x" /> 
      <DoubleAnimation Storyboard.TargetProperty="Opacity" 
               To="1" AutoReverse="True" Duration="0:0:0.5" /> 
     </Storyboard> 

,并从后台代码:

 Storyboard sb = Resources["Blink"] as Storyboard;    
     sb.Begin(this.popup); 

这是做了正确的方法是什么?

+0

这意味着你不需要整个DataTrigger的东西?只想在Border元素上启动不透明度动画? – Clemens

+0

是的,我修改了代码,查看我的更新。这是做到这一点的正确方法吗? – user1624552

你可以直接启动这样的动画:

popup.BeginAnimation(UIElement.OpacityProperty, 
    new DoubleAnimation 
    { 
     To = 0, 
     Duration = TimeSpan.FromSeconds(0.5), 
     AutoReverse = true, 
     RepeatBehavior = RepeatBehavior.Forever 
    }); 
+0

太棒了!我喜欢。 – user1624552