2017-09-22 21 views
0

私はウィンドウをターゲットとするスタイルを持っています。基本的なフェードイン/フェードアウトを行い、ストーリーボードを停止/シークして、ウィンドウが私の望むように動作します。私はその後、ウィンドウがフェードアウトで実際に閉じられていないことに気付きました。スタイルの関連部分は次のとおりです。* 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ですが、実際にはまだ開いています。

私は「閉じる」に2つ目のアニメーションの完了イベントを設定しようとしたが、得た:

を「完了」イベントがスタイルにターゲットタグに指定することはできません。代わりにEventSetterを使用してください。 Line 225 Position 123.

Opacity DPにコールバックを追加して0になるのを待っていますが、それは悪い設計のようです。

答えて

0

可能な解決策はStoryBoardの最後Animationによってtrueに変化したときWindowを閉じ添付プロパティ作成することによって行うことができる。

<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); 
     } 
    } 
} 
関連する問題