Как закрыть PopupMenu в WinRT

1

Возможно ли закрыть/скрыть программно PopupMenu в WinRT?

Я попытался сосредоточиться на чем-то другом, но он не работает. Этот класс (PopupMenu) не предоставляет методы для его закрытия.

Я также попытался заменить PopupMenu на MenuFlyout, но в моем случае, когда появляется другое представление, элементы исчезли, и его больше невозможно скрыть (программно).

Скриншот:

Изображение 174551

Теги:
popup
windows-store-apps
windows-runtime
windows-8.1

2 ответа

0
Лучший ответ

Я нашел решение для своей проблемы, но мне пришлось заменить 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.

0

Невозможно программно скрыть меню после его показания.

Вы показываете его с вызовом ShowAsync (позиция), который вы ожидаете. Единственный способ для этого вызова - отказаться от контроля - либо выбрать опцию из меню (вы можете отменить вариант), либо щелкнуть в любом месте меню.

Для чего вы его используете и почему вам нужно отменить его после показа, а не отменить его сами? Я могу представить себе хотя бы один сценарий, в котором я хочу, чтобы он исчез, как если бы пользователь открыл всплывающее меню, а затем завершил фоновый процесс, а команды во всплывающем меню больше не применимы или их необходимо обновить. Но каков ваш сценарий использования - возможно, есть обходное решение для вашей ситуации?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню