我正在尝试了解 WPF/WP7 Silverlight 中的附加行为,我遇到了一个概念障碍,我想知道是否有人可以权衡。
我正在尝试创建的功能示例如下:用户单击其 Click 处理程序触发导航的按钮(即 NavigationContext.Navigate()),并且在实际发生导航之前,按钮上会出现动画将其不透明度从 1 降低到 0(“淡出”效果)。
所以,按顺序:
- 用户点击按钮
- 按钮执行动画
- 导航发生
很简单,对吧?我创建了一个看起来像这样的附加行为:
public class FadeBehavior : Behavior<Button>
{
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.Click += (obj, args) => {
Storyboard sb = new Storyboard();
DoubleAnimation an = new DoubleAnimation();
an.Duration = TimeSpan.FromMilliseconds(300);
an.From = 1;
an.To = 0;
Storyboard.SetTarget(an, AssociatedObject);
Storyboard.SetTargetProperty(an, new PropertyPath("Opacity"));
sb.Children.Add(an);
sb.Begin();
};
}
}
如果按钮所在页面的 .xaml.cs 不包含触发导航的 Click 处理程序,这显然可以正常工作,但是当我连接它时,动画在导航发生之前没有完成。我当然理解为什么会这样,但我想知道是否有一种方法可以实现这一点,同时也展现出非糟糕设计的美妙特性。
我发现这个看似相关的 SO 线程,但接受的答案真的是唯一的方法吗?
谢谢你的帮助。
编辑:如果你碰巧有一个 WP7 并且一心想弄清楚这一点,Reddit 阅读器应用程序“Baconit”会表现出类似于我在单击故事标题时感兴趣的行为。