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


MenuFlyout Класс

Определение

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

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

Примеры

Совет

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

Приложение коллекции WinUI 3 содержит интерактивные примеры большинства элементов управления, функций и функций WinUI 3. Получите приложение из Microsoft Store или получите исходный код в GitHub.

В этом примере создается класс 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.

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

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

Вы можете изменить стандартные параметры Style и ControlTemplate , чтобы придать элементу управления уникальный внешний вид. Сведения об изменении стиля и шаблона элемента управления см. в разделе Стили XAML. Стиль, шаблон и ресурсы по умолчанию, определяющие внешний вид элемента управления, включаются в generic.xaml файл . В целях разработки generic.xaml устанавливается вместе с пакетом NuGet Windows App SDK. По умолчанию, это расположение \Users\<username>\.nuget\packages\microsoft.windowsappsdk\<version>\lib\uap10.0\Microsoft.UI\Themes\generic.xaml. Стили и ресурсы из разных версий пакета SDK могут иметь разные значения.

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

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

MenuFlyout()

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

Свойства

AllowFocusOnInteraction

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

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

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

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

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

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

Всегда возвращает в null приложении Windows App SDK. Вместо этого используйте DispatcherQueue .

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

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

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

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

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

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

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

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

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

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

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

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

LightDismissOverlayMode

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

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

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

MenuFlyoutPresenterStyleProperty

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

OverlayInputPassThroughElement

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

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

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

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

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

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

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

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

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

(Унаследовано от 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)

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

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