【发布时间】:2014-06-06 23:53:54
【问题描述】:
我正在为应用栏图标按钮实现我自己的弹出菜单(类似于PhoneFlipMenu 工具)。我正在为弹出窗口使用垂直 StackPanel,当单击相应的应用栏按钮时,我需要用动画显示它。代码如下所示:
private void appBarIconButtonList_Click(object sender, EventArgs e)
{
ApplicationBar.IsVisible = false;
AnimatePopupMenuListCommands(true);
}
private void AnimatePopupMenuListCommands(bool openMenu)
{
PlaneProjection planeProjection = popupMenuListCommands.Projection as PlaneProjection;
DoubleAnimation anima = new DoubleAnimation();
if (openMenu)
{
anima.From = 90;
anima.To = 0;
}
else
{
anima.From = 0;
anima.To = 90;
}
anima.Duration = new Duration(TimeSpan.FromSeconds(0.1));
Storyboard.SetTarget(anima, planeProjection);
Storyboard.SetTargetProperty(anima, new PropertyPath(PlaneProjection.RotationXProperty));
Storyboard storyboard = new Storyboard();
storyboard.Children.Add(anima);
storyboard.Begin();
}
主要问题是动画在应用程序栏隐藏之前开始。结果,弹出菜单在那之后跳跃了一点。应用栏完全隐藏后如何运行动画?
【问题讨论】:
-
操作系统隐藏appbar的动画总是在固定的时间完成。也许您可以测量它并让计时器在开始动画之前等待一段时间。或者,您可以将延迟作为动画的一部分来代替计时器。
-
@SJD,如果应用栏被隐藏,我们会在底部获得额外的空间。当应用栏消失时,整个布局因此重新计算,弹出菜单连同其下的控件一起向下移动。或许,对这种效果更好的描述是,弹出菜单的 Top 坐标增加了隐藏后应用栏的高度。
-
@disklosr,使用计时器并硬编码时间值是个坏主意。我们需要一个通用的解决方案。
-
@TecMan 我知道这一点,但我想不出任何其他解决方案。当应用栏位于视图的顶部而不是视图的一部分时,您的解决方案(正在重新计算的视图的高度)可能不起作用。另外,你确定动画结束后重新计算完成了吗?
-
@disklosr,我的应用栏不是半透明的,所以它不在其他控件之上。
标签: silverlight animation windows-phone-8 popupmenu application-bar