2017-07-26 44 views
1

在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

回答

3

你可以直接啓動這樣的動畫:

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

太棒了!我喜歡。 – user1624552