2017-09-22 68 views
0

我有一個針對一個窗口的Style,我做了一些基本的淡入/淡出以及通過故事板停止/尋找,窗口的行爲表現得如何。然後我注意到窗口實際上並沒有關閉淡出。風格的相關部分是:* STYLE *故事板完成後的關閉窗口

<Style.Triggers> 
     <EventTrigger RoutedEvent="Window.Loaded"> 
      <BeginStoryboard Name="sbFadeInFadeOut"> 
       <Storyboard> 
        <DoubleAnimation Storyboard.TargetProperty="Opacity" Duration="00:00:01" From="0.0" To="0.8" /> 
        <DoubleAnimation Storyboard.TargetProperty="Opacity" Duration="00:00:01.5" From="0.8" To="0.0" BeginTime="00:00:04" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 

所以我淡入窗口,然後過了一段時間我淡出它。還有一些其他場景我想要這個動畫去,有些地方我只想平躺在窗外。

無論如何,在這個故事板的末尾,不透明度爲0,但窗口實際上仍然打開。

我試過第二動畫的完成事件設置爲「關閉」,但得到:

事件「已完成」不能在樣式一個目標標籤中指定。改用EventSetter。行225位置123.

我有種工作,通過添加回調不透明度DP並等待它爲0,但這似乎是一個糟糕的設計。

回答

0

一種可能的解決方案可以通過創建附加屬性時通過變爲true,其封閉Window要做的StoryBoard的最後Animation

<Style.Triggers> 
    <EventTrigger RoutedEvent="Window.Loaded"> 
     <BeginStoryboard Name="sbFadeInFadeOut"> 
      <Storyboard> 
       <DoubleAnimation Storyboard.TargetProperty="Opacity" Duration="00:00:01" From="0.0" To="0.8" /> 
       <DoubleAnimation Storyboard.TargetProperty="Opacity" Duration="00:00:01.5" From="0.8" To="0.0" BeginTime="00:00:04" /> 
       <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="(local:WindowAttachedProperties.IsClosed)" BeginTime="00:00:05.5"> 
        <DiscreteBooleanKeyFrame Value="True" /> 
       </BooleanAnimationUsingKeyFrames> 
      </Storyboard> 
     </BeginStoryboard> 
    </EventTrigger> 
</Style.Triggers> 

和附接的屬性被定義爲:

using System.Windows; 

namespace MyApplication.AttachedProperties 
{ 
    public class WindowAttachedProperties 
    { 
     public static readonly DependencyProperty IsClosedProperty = DependencyProperty.RegisterAttached(
      "IsClosed", typeof(bool), typeof(WindowAttachedProperties), new PropertyMetadata(default(bool), PropertyChangedCallback)); 

     private static void PropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs) 
     { 
      var window = dependencyObject as Window; 
      var isClosed = window?.GetValue(IsClosedProperty) as bool?; 

      if (window != null && isClosed.GetValueOrDefault()) 
      { 
       window.Close(); 
      } 
     } 

     public static void SetIsClosed(DependencyObject element, bool value) 
     { 
      element.SetValue(IsClosedProperty, value); 
     } 

     public static bool GetIsClosed(DependencyObject element) 
     { 
      return (bool) element.GetValue(IsClosedProperty); 
     } 
    } 
}