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>
- Наследование
- Производный
- Атрибуты
Требования к 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 временно отображает список команд или параметров, связанных с текущими действиями пользователя.
![Элемент управления](windows.ui.xaml.controls/images/controls/menuflyout.png?view=winrt-10240)
Используйте элемент управления 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) |