1

我正在为应用栏图标按钮(类似于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();
}

主要问题是动画在应用程序栏隐藏之前开始。结果,弹出菜单在那之后跳跃了一点。应用栏完全隐藏后如何运行动画?

4

2 回答 2

0

动画完成后尝试隐藏应用程序栏。

 storyboard.Completed += storyboard_Completed;


    void storyboard_Completed(object sender, EventArgs e)
    {
        ApplicationBar.IsVisible = false;
    }
于 2014-06-04T11:43:57.240 回答
0

您可以使用 Dispatcher 或 DispatcherTimer 等待应用栏被隐藏。这是使用 Dispatcher 的示例:

private void ApplicationBarIconButton_OnClick(object sender, EventArgs e)
{
    ApplicationBar.IsVisible = false;
    WaitForAppBarThenShowMenu();
}

private void WaitForAppBarThenShowMenu()
{
    if (ApplicationBar.IsVisible)
    {
        Dispatcher.BeginInvoke(WaitForAppBarThenShowMenu);
    }
    else
    {
        AnimatePopupMenuListCommands();
    }
}

旧答案 - 不起作用 我相信您可以订阅 ApplicationBar 的StateChanged 事件,然后开始您的故事。

EventHandler<ApplicationBarStateChangedEventArgs> stateChanged = null;
stateChanged = (s,e) => 
{
    ApplicationBar.StateChanged -= stateChanged;
    AnimatePopupMenuListCommands(true);
};
ApplicationBar.StateChanged += stateChanged;
ApplicationBar.IsVisible = false;
于 2014-06-05T14:10:32.333 回答