Возможно ли закрыть/скрыть программно PopupMenu в WinRT?
Я попытался сосредоточиться на чем-то другом, но он не работает. Этот класс (PopupMenu) не предоставляет методы для его закрытия.
Я также попытался заменить PopupMenu на MenuFlyout, но в моем случае, когда появляется другое представление, элементы исчезли, и его больше невозможно скрыть (программно).
Скриншот:
Я нашел решение для своей проблемы, но мне пришлось заменить PopupMenu
на FlyoutMenu
. Вместо использования Commands
из PopupMenu
я просто привязал обработчики событий кликов к элементам.
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>
Чтобы скрыть всплывающее IsFlyoutHidden
вам нужно только переключить IsFlyoutHidden
в модель просмотра на true
.
Невозможно программно скрыть меню после его показания.
Вы показываете его с вызовом ShowAsync (позиция), который вы ожидаете. Единственный способ для этого вызова - отказаться от контроля - либо выбрать опцию из меню (вы можете отменить вариант), либо щелкнуть в любом месте меню.
Для чего вы его используете и почему вам нужно отменить его после показа, а не отменить его сами? Я могу представить себе хотя бы один сценарий, в котором я хочу, чтобы он исчез, как если бы пользователь открыл всплывающее меню, а затем завершил фоновый процесс, а команды во всплывающем меню больше не применимы или их необходимо обновить. Но каков ваш сценарий использования - возможно, есть обходное решение для вашей ситуации?