2016-04-03 4 views
1

DoubleAnimationを使用してXAMLでフェードアウトアニメーションを設定しています。それはFrameをフェードアウトし、完了したらCompletedイベントを発生させます。WPF:イベントハンドラ内からアニメーションを起動したコントロールの名前を取得する方法は?

私はイベントハンドラ内からアニメーションを起動したコントロールの名前を取得したいと思いますが、私は方法を見つけることができません。

XAML

<Button x:Name="btnNavMessages"> 
    <!-- Some Text--> 
    <Button.Triggers> 
     <EventTrigger RoutedEvent="Button.PreviewMouseDown"> 
      <BeginStoryboard> 
       <Storyboard> 
        <DoubleAnimation 
         Storyboard.TargetName="MichaelFrame" 
         Storyboard.TargetProperty="Opacity" 
         To="0" 
         Duration="0:0:1" 
         Completed="DoubleAnimation_Completed" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </Button.Triggers> 
</Button> 

コードビハインド

​​

任意の助けいただければ幸いです。ありがとう。


EDIT:

私は、次のコードを試してみましたが、それは動作しますが、それは本当にエレガントではありません。優雅さに加えて、迷惑なバグがあります。ボタンをクリックしてアニメーションを押している間にタブフォーカスが変わり、アプリケーションが停止します。その他のソリューション?

Button btn = FocusManager.GetFocusedElement(this) as Button; 
+1

私は考えることができる唯一のことは、それがあった時にボタンを "思い出す" ことです押されたそれはおそらく同じようにハッキーですが、あなたが記述したバグに悩まされることはありません。 – ChrisF

+0

@ChrisF - そのような実装の例を教えていただけますか? – Sipo

答えて

1

これは解決策ですか?

XAMLは

Completed="DoubleAnimation_Completed" 

は、変更、削除

<Button x:Name="btnNavMessages" Click="btnNavMessages_Click" > 

コードビハインド

private void btnNavMessages_Click(object sender, RoutedEventArgs e) 
{ 
    var btn = sender as Button; 
} 
+0

いいえ、アニメーションが完了した後にのみハンドラを起動する必要があるため、\。その他のソリューション?ありがとう。 – Sipo

関連する問題