2014-09-02 48 views
1

是否可以在WinRT中以編程方式關閉/隱藏PopupMenu如何關閉WinRT中的PopupMenu

我試圖把重點放在別的東西上,但它不起作用。 這個類(PopupMenu)不提供關閉它的方法。

我也嘗試用MenuFlyout替換PopupMenu,但在我的情況下,當另一個視圖出現時,項目消失了,並且無法以編程方式隱藏它。

截圖:

MenuFlyout

回答

0

我找到了解決方案,但我必須用FlyoutMenu替換PopupMenu。而不是從PopupMenu使用Commands我只是附加單擊事件處理程序的項目。

public static class FlyoutHelper 
{ 
    public static readonly DependencyProperty IsHiddenProperty = 
     DependencyProperty.RegisterAttached("IsHidden", typeof(bool), typeof(FlyoutHelper), new PropertyMetadata(false, OnIsHiddenPropertyChanged)); 

    public static void SetIsHidden(DependencyObject d, bool value) 
    { 
     d.SetValue(IsHiddenProperty, value); 
    } 

    public static bool GetIsHidden(DependencyObject d) 
    { 
     return (bool)d.GetValue(IsHiddenProperty); 
    } 

    private static void OnIsHiddenPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     var flyout = d as FlyoutBase; 
     bool isHidden = (bool)e.NewValue; 

     if (flyout != null && isHidden) 
     { 
      flyout.Hide(); 
     } 
    } 
} 

用法:

<MenuFlyout helpers:FlyoutHelper.IsHidden="{Binding IsFlyoutHidden}"> 
    <MenuFlyoutItem Click="Item1Clicked" /> 
    <MenuFlyoutItem Click="Item2Clicked" /> 
</MenuFlyout> 

要隱藏彈出按鈕,你只需要在瀏覽模式切換到IsFlyoutHiddentrue

0

沒有辦法以編程方式隱藏菜單一旦其出。

您可以使用您等待的ShowAsync(位置)調用來顯示它。等待調用放棄控制的唯一方法是從菜單中選擇一個選項(您可以取消選項)或單擊菜單中的任意位置。

你使用它的目的是什麼?爲什麼你需要取消它,而不是讓用戶自己取消它?我可以想象至少有一個場景,我希望它消失,就好像用戶打開了彈出式菜單,然後完成了後臺進程,彈出菜單中的命令不再適用或需要更新。但是,您的使用場景是什麼 - 也許您的情況有一個解決方法?