我正在使用DoubleAnimation在XAML中设置淡出动画。它会淡出Frame
,然后在Completed
事件结束时触发。
我想从事件处理程序中获取触发动画的控件的名称,但我无法找到方法。
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>
代码隐藏
private void DoubleAnimation_Completed(object sender, EventArgs e)
{
// How to find out which control fired the animation? e.g. "btnNavMessages"
// Tried `Button btn = sender as Button;`
// But `sender.ToString()` is `System.Windows.Media.Animation.AnimationClock`, not `Button`
}
任何帮助将不胜感激。感谢。
修改
我尝试过以下代码,但它确实有效,但它并不优雅。除了优雅之外,它还有一个令人讨厌的错误 - 当我点击按钮时,在动画期间按 tab ,焦点会改变,应用程序也会停止。还有其他解决方案吗?
Button btn = FocusManager.GetFocusedElement(this) as Button;
答案 0 :(得分: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;
}