【发布时间】:2016-04-03 16:36:16
【问题描述】:
我正在使用 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;
【问题讨论】:
-
我唯一能想到的就是在按下按钮时“记住”按钮。虽然这可能同样 hacky,但它不会受到您描述的错误的影响。
-
@ChrisF - 你能举个例子吗?