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

Dispatcher または DispatcherTimer を使用して appbar が非表示になるのを待つことができます。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 に答える