Поделиться через


MenuFlyout Класс

Определение

Представляет всплывающий элемент, в котором отображается меню команд.

/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.UI.Xaml.Markup.ContentProperty(Name="Items")]
class MenuFlyout : FlyoutBase
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.UI.Xaml.Markup.ContentProperty(Name="Items")]
public class MenuFlyout : FlyoutBase
Public Class MenuFlyout
Inherits FlyoutBase
<MenuFlyout>
  oneOrMoreItems
</MenuFlyout>
Наследование
Object IInspectable DependencyObject FlyoutBase MenuFlyout
Производный
Атрибуты

Требования к Windows

Семейство устройств
Windows 10 (появилось в 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (появилось в v1.0)

Примеры

Совет

Дополнительные сведения, рекомендации по проектированию и примеры кода см. в разделе Меню и контекстные меню.

Если у вас установлено приложение коллекции WinUI 2 , щелкните здесь, чтобы открыть приложение и увидеть MenuFlyout в действии.

В этом примере создается класс MenuFlyout и используется свойство ContextFlyout, доступное для большинства элементов управления, для отображения MenuFlyout class в качестве контекстного меню.

<Rectangle Height="100" Width="100">
  <Rectangle.ContextFlyout>
    <MenuFlyout>
      <MenuFlyoutItem Text="Change color" Click="ChangeColorItem_Click" />
    </MenuFlyout>
  </Rectangle.ContextFlyout>
  <Rectangle.Fill>
    <SolidColorBrush x:Name="rectangleFill" Color="Red" />
  </Rectangle.Fill>
</Rectangle>
private void ChangeColorItem_Click(object sender, RoutedEventArgs e)
{
    // Change the color from red to blue or blue to red.
    if (rectangleFill.Color == Windows.UI.Colors.Red)
    {
        rectangleFill.Color = Windows.UI.Colors.Blue;
    }
    else
    {
        rectangleFill.Color = Windows.UI.Colors.Red;
    }
}

Следующий пример почти идентичен, но вместо использования свойства ContextFlyout для отображения класса MenuFlyout как контекстного меню в нем используется свойство FlyoutBase.ShowAttachedFlyout для его отображения как меню.

<Rectangle
  Height="100" Width="100"
  Tapped="Rectangle_Tapped">
  <FlyoutBase.AttachedFlyout>
    <MenuFlyout>
      <MenuFlyoutItem Text="Change color" Click="ChangeColorItem_Click" />
    </MenuFlyout>
  </FlyoutBase.AttachedFlyout>
  <Rectangle.Fill>
    <SolidColorBrush x:Name="rectangleFill" Color="Red" />
  </Rectangle.Fill>
</Rectangle>
private void Rectangle_Tapped(object sender, TappedRoutedEventArgs e)
{
    FlyoutBase.ShowAttachedFlyout((FrameworkElement)sender);
}

private void ChangeColorItem_Click(object sender, RoutedEventArgs e)
{
    // Change the color from red to blue or blue to red.
    if (rectangleFill.Color == Windows.UI.Colors.Red)
    {
        rectangleFill.Color = Windows.UI.Colors.Blue;
    }
    else
    {
        rectangleFill.Color = Windows.UI.Colors.Red;
    }
}

В этом примере показано, как добавлять и удалять элементы меню во время выполнения в зависимости от изменяющихся условий в приложении.

<StackPanel Margin="40" Width="220">
    <Rectangle x:Name="Rect1" Height="100" Width="200" 
               Stroke="Black" StrokeThickness="1" Fill="White">
        <Rectangle.ContextFlyout>
            <MenuFlyout x:Name="RectangleColorMenu"/>
        </Rectangle.ContextFlyout>
    </Rectangle>

    <StackPanel>
        <TextBlock TextWrapping="WrapWholeWords"
                   Text="Check colors to include in the menu, then choose a color from the context menu on the rectangle."/>
        <CheckBox Content="Blue" Click="CheckBox_Click" Tag="blue"/>
        <CheckBox Content="Green" Click="CheckBox_Click" Tag="green"/>
        <CheckBox Content="Red" Click="CheckBox_Click" Tag="red"/>
        <CheckBox Content="Yellow" Click="CheckBox_Click" Tag="yellow"/>
    </StackPanel>
</StackPanel>
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
    // Using the Tag property lets you localize the display name
    // without affecting functionality.
    var cb = (CheckBox)sender;
    if (cb.IsChecked == true)
    {
        AddMenuItem(cb.Tag.ToString(), cb.Content.ToString());
    }
    else
    {
        RemoveMenuItem(cb.Content.ToString());
    }
}

private void AddMenuItem(string colorString, string locColorName)
{
    // Set the color.
    Color newColor = Colors.Blue;
    if (colorString == "green")
        newColor = Colors.Green;
    else if (colorString == "red")
        newColor = Colors.Red;
    else if (colorString == "yellow")
        newColor = Colors.Yellow;

    // Create the menu item.
    var newMenuItem = new MenuFlyoutItem();
    newMenuItem.Text = locColorName;
    newMenuItem.Click += (s, e1) =>
    {
        Rect1.Fill = new SolidColorBrush(newColor);
    };

    // Add the item to the menu.
    RectangleColorMenu.Items.Add(newMenuItem);

    // Sort the menu so it's always consistent.
    var orderedItems =  RectangleColorMenu.Items.OrderBy(i => ((MenuFlyoutItem)i).Text).ToList();
    RectangleColorMenu.Items.Clear();
    foreach (var item in orderedItems)
    {
        RectangleColorMenu.Items.Add(item);
    }
}

private void RemoveMenuItem(string locColorName)
{
    // Get any menu items to remove and remove them.
    var items = RectangleColorMenu.Items.Where(i => ((MenuFlyoutItem)i).Text == locColorName);
    foreach (MenuFlyoutItem item in items)
    {
        RectangleColorMenu.Items.Remove(item);
    }
}

Комментарии

Совет

Дополнительные сведения, рекомендации по проектированию и примеры кода см. в разделе Меню и контекстные меню.

MenuFlyout временно отображает список команд или параметров, связанных с текущими действиями пользователя.

Элемент управления

Используйте элемент управления Flyout для отображения отдельных элементов и элемент управления MenuFlyout для отображения меню элементов. Дополнительные сведения см. в разделе Меню и контекстные меню.

Элемент управления MenuFlyout можно использовать в качестве значения свойства Button.Flyout . Обычно это задается в XAML как часть определения пользовательского интерфейса страницы. Кнопка — это единственный элемент управления, имеющий выделенное свойство Flyout . Если задано значение Button.Flyout, menuFlyout отображается при нажатии кнопки или вызове иным образом.

Чтобы связать MenuFlyout с другими элементами управления, используйте свойство ContextFlyout , доступное в любом элементе UIElement.

Примечания для предыдущих версий

Примечание

Свойство ContextFlyout недоступно до юбилейного обновления Windows 10 (версия пакета SDK 14393). Для более ранних версий используйте присоединенное свойство FlyoutBase.AttachedFlyout .

Присоединенное свойство FlyoutBase.AttachedFlyout можно использовать для связывания MenuFlyout с другими элементами управления. Если Элемент MenuFlyout назначается другим элементам пользовательского интерфейса с помощью FlyoutBase.AttachedFlyout, необходимо вызвать метод ShowAt или статический метод ShowAttachedFlyout для отображения всплывающего элемента.

Помимо перечисленных выше элементов, существуют и другие члены базового класса FlyoutBase , которые часто используются в типичных сценариях MenuFlyout:

  • FlyoutBase.AttachedFlyout: присоединенное свойство, которое связывает MenuFlyout с определенным элементом пользовательского интерфейса (это может быть любой производный от FrameworkElement класс).
  • ShowAttachedFlyout: статический метод, который может определить, связан ли всплывающий элемент с элементом пользовательского интерфейса с помощью использования FlyoutBase.AttachedFlyout . Если это так, метод вызывает ShowAt внутри, используя указанный элемент FrameworkElement .

Стиль и шаблон элемента управления

Вы можете изменить стандартные параметры Style и ControlTemplate , чтобы придать элементу управления уникальный внешний вид. Сведения об изменении стиля и шаблона элемента управления см. в разделе Стилизация элементов управления. Стиль, шаблон и ресурсы по умолчанию, определяющие внешний вид элемента управления, включаются в generic.xaml файл . В целях разработки generic.xaml доступен локально с установкой пакета SDK или Пакета NuGet.

  • Стили WinUI (рекомендуется): Обновленные стили из WinUI см. в разделе \Users\<username>\.nuget\packages\microsoft.ui.xaml\<version>\lib\uap10.0\Microsoft.UI.Xaml\Themes\generic.xaml.
  • Стили, отличные от WinUI: Встроенные стили см. в разделе %ProgramFiles(x86)%\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\<SDK version>\Generic\generic.xaml.

Если вы настроили установку, расположения могут отличаться. Стили и ресурсы из разных версий пакета SDK могут иметь разные значения.

XAML также включает ресурсы, которые можно использовать для изменения цветов элемента управления в различных визуальных состояниях без изменения шаблона элемента управления. Изменение этих ресурсов предпочтительнее, чем установка таких свойств, как Background и Foreground. Дополнительные сведения см. в разделе Облегчаемые стили статьио стилях XAML . Легкие ресурсы по стилю доступны начиная с Windows 10 версии 1607 (пакет SDK 14393).

Журнал версий

Версия Windows Версия пакета SDK Добавленная стоимость
1809 17763 ShowAt

Конструкторы

MenuFlyout()

Инициализирует новый экземпляр класса MenuFlyout .

Свойства

AllowFocusOnInteraction

Возвращает или задает значение, указывающее, получает ли элемент фокус автоматически, когда пользователь взаимодействует с ним.

(Унаследовано от FlyoutBase)
AllowFocusWhenDisabled

Возвращает или задает значение, указывающее, может ли элемент управления получать фокус при отключении.

(Унаследовано от FlyoutBase)
AreOpenCloseAnimationsEnabled

Возвращает или задает значение, указывающее, воспроизводится ли анимация при открытии или закрытии всплывающего меню.

(Унаследовано от FlyoutBase)
Dispatcher

Возвращает объект CoreDispatcher , с которым связан этот объект. CoreDispatcher представляет собой средство, которое может получить доступ к DependencyObject в потоке пользовательского интерфейса, даже если код инициируется потоком, не относящегося к пользовательскому интерфейсу.

(Унаследовано от DependencyObject)
ElementSoundMode

Возвращает или задает значение, указывающее предпочтительное значение элемента управления для воспроизведения звуков.

(Унаследовано от FlyoutBase)
InputDevicePrefersPrimaryCommands

Возвращает значение, указывающее, не открывает ли устройство ввода, используемое для открытия всплывающего меню, дополнительные команды.

(Унаследовано от FlyoutBase)
IsConstrainedToRootBounds

Возвращает значение, указывающее, отображается ли всплывающее меню в пределах корня XAML.

(Унаследовано от FlyoutBase)
IsOpen

Возвращает значение, указывающее, открыт ли всплывающий элемент.

(Унаследовано от FlyoutBase)
Items

Возвращает коллекцию, используемую для создания содержимого меню.

LightDismissOverlayMode

Возвращает или задает значение, указывающее, затенена ли область за пределами пользовательского интерфейса со светлым закрытием .

(Унаследовано от FlyoutBase)
MenuFlyoutPresenterStyle

Возвращает или задает стиль, используемый при отрисовке MenuFlyout.

MenuFlyoutPresenterStyleProperty

Определяет свойство зависимости MenuFlyoutPresenterStyle .

OverlayInputPassThroughElement

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

(Унаследовано от FlyoutBase)
Placement

Возвращает или задает расположение по умолчанию, используемое для всплывающего меню, по отношению к целевому объекту размещения.

(Унаследовано от FlyoutBase)
ShouldConstrainToRootBounds

Возвращает или задает значение, указывающее, должен ли всплывающий элемент отображаться в границах корня XAML.

(Унаследовано от FlyoutBase)
ShowMode

Возвращает или задает значение, указывающее поведение всплывающего меню при отображении.

(Унаследовано от FlyoutBase)
Target

Возвращает элемент, используемый в качестве целевого объекта размещения всплывающего элемента.

(Унаследовано от FlyoutBase)
XamlRoot

Возвращает или задает xamlRoot, в котором просматривается этот всплывающий элемент.

(Унаследовано от FlyoutBase)

Методы

ClearValue(DependencyProperty)

Очищает локальное значение свойства зависимостей.

(Унаследовано от DependencyObject)
CreatePresenter()

При переопределении в производном классе инициализирует элемент управления для отображения содержимого всплывающего элемента в соответствии с его производным элементом управления. Примечание. Этот метод не имеет реализации базового класса и должен быть переопределен в производном классе.

(Унаследовано от FlyoutBase)
GetAnimationBaseValue(DependencyProperty)

Возвращает любое базовое значение, установленное для свойства зависимостей, которое применяется в случаях, когда анимация не активна.

(Унаследовано от DependencyObject)
GetValue(DependencyProperty)

Возвращает текущее действующее значение свойства зависимостей из DependencyObject.

(Унаследовано от DependencyObject)
Hide()

Закрывает всплывающий элемент.

(Унаследовано от FlyoutBase)
OnProcessKeyboardAccelerators(ProcessKeyboardAcceleratorEventArgs)

Вызывается непосредственно перед обработкой сочетания клавиш (ускорителя) в приложении. Вызывается всякий раз, когда код приложения или внутренние процессы вызывают ProcessKeyboardAccelerators. Переопределите этот метод, чтобы повлиять на обработку ускорителя по умолчанию.

(Унаследовано от FlyoutBase)
ReadLocalValue(DependencyProperty)

Возвращает локальное значение свойства зависимостей, если задано локальное значение.

(Унаследовано от DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

Регистрирует функцию уведомления для прослушивания изменений определенного DependencyProperty в этом экземпляре DependencyObject .

(Унаследовано от DependencyObject)
SetValue(DependencyProperty, Object)

Задает локальное значение свойства зависимостей для Объекта DependencyObject.

(Унаследовано от DependencyObject)
ShowAt(DependencyObject, FlyoutShowOptions)

Отображение всплывающего элемента, размещенного по отношению к указанному элементу с использованием указанных параметров.

(Унаследовано от FlyoutBase)
ShowAt(FrameworkElement)

Отображает всплывающий элемент, размещенный по отношению к указанному элементу.

(Унаследовано от FlyoutBase)
ShowAt(UIElement, Point)

Отображение всплывающего элемента, размещенного с указанным смещением относительно указанного целевого элемента.

TryInvokeKeyboardAccelerator(ProcessKeyboardAcceleratorEventArgs)

Пытается вызвать сочетание клавиш (ускоритель).

(Унаследовано от FlyoutBase)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

Отменяет уведомление об изменениях, которое было ранее зарегистрировано путем вызова Метода RegisterPropertyChangedCallback.

(Унаследовано от DependencyObject)

События

Closed

Происходит, когда всплывающий элемент скрыт.

(Унаследовано от FlyoutBase)
Closing

Происходит, когда всплывающий элемент начинает скрываться.

(Унаследовано от FlyoutBase)
Opened

Происходит при отображении всплывающего меню.

(Унаследовано от FlyoutBase)
Opening

Происходит перед показом всплывающего меню.

(Унаследовано от FlyoutBase)

Применяется к

См. также раздел