MenuFlyout 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示显示命令菜单的浮出控件。
/// [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>
- 继承
- 派生
- 属性
示例
Tip
有关详细信息、设计指南和代码示例,请参阅 菜单和上下文菜单。
WinUI 3 示例集应用程序包括大多数 WinUI 3 控件、特性和功能的交互式示例。 从 Microsoft 应用商店 获取应用,或在 GitHub 上获取源代码。
此示例创建 MenuFlyout 类 ,并使用 ContextFlyout 属性(大多数控件可用的属性)将 MenuFlyout 类 显示为上下文菜单。
<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;
}
}
下一个示例几乎完全相同,但该示例使用 FlyoutBase.ShowAttachedFlyout 属性将其显示为菜单,而不是使用 ContextFlyout 属性来显示 MenuFlyout 类作为上下文菜单。
<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);
}
}
注解
Tip
有关详细信息、设计指南和代码示例,请参阅 菜单和上下文菜单。
MenuFlyout 暂时显示与用户当前正在执行的操作相关的命令或选项列表。
使用 浮出控件 显示单个项和 MenuFlyout 控件以显示项菜单。 有关详细信息,请参阅 菜单和上下文菜单。
MenuFlyout 控件可用作 Button.Flyout 属性的值。 这通常在 XAML 中设置为页面 UI 定义的一部分。 Button 是唯一具有专用 浮出控件 属性的控件。 设置为 Button.Flyout 时,MenuFlyout 将在点击或调用该按钮时显示。
若要将 MenuFlyout 与其他控件关联为内容菜单,请使用任何 UIElement 上可用的 ContextFlyout 属性。
可以使用 FlyoutBase.AttachedFlyout 附加属性将 MenuFlyout 与其他控件关联为常规菜单。 使用 FlyoutBase.AttachedFlyout 将 MenuFlyout 分配给其他 UI 元素时,必须调用 ShowAt 方法或静态 ShowAttachedFlyout 方法以显示浮出控件。
控件样式和模板
可以修改默认 样式 和 ControlTemplate ,使控件具有唯一的外观。 有关修改控件样式和模板的信息,请参阅 XAML 样式。 定义控件外观的默认样式、模板和资源包含在 generic.xaml 文件中。 出于设计目的,generic.xaml随 Windows 应用 SDK NuGet 包一起安装。 默认情况下,此位置是 \Users\<username>\.nuget\packages\microsoft.windowsappsdk\<version>\lib\uap10.0\Microsoft.UI\Themes\generic.xaml。 不同版本的 SDK 的样式和资源可能具有不同的值。
XAML 还包括可用于在不修改控件模板的情况下在不同视觉状态中修改控件颜色的资源。 修改这些资源是设置 背景 和 前台等属性的首选。 有关详细信息,请参阅 XAML 样式文章的“轻量级样式”部分。
构造函数
| 名称 | 说明 |
|---|---|
| MenuFlyout() |
初始化 MenuFlyout 类的新实例。 |
属性
| 名称 | 说明 |
|---|---|
| AllowFocusOnInteraction |
获取或设置一个值,该值指示当用户与其交互时元素是否自动获得焦点。 (继承自 FlyoutBase) |
| AllowFocusWhenDisabled |
获取或设置一个值,该值指定控件在禁用时是否可以接收焦点。 (继承自 FlyoutBase) |
| AreOpenCloseAnimationsEnabled |
获取或设置一个值,该值指示在打开或关闭浮出控件时是否播放动画。 (继承自 FlyoutBase) |
| Dispatcher |
始终在 Windows 应用 SDK 应用中返回 |
| DispatcherQueue |
获取 |
| ElementSoundMode |
获取或设置一个值,该值指定控件是否播放声音的首选项。 (继承自 FlyoutBase) |
| InputDevicePrefersPrimaryCommands |
获取一个值,该值指示用于打开浮出控件的输入设备是否不容易打开辅助命令。 (继承自 FlyoutBase) |
| IsConstrainedToRootBounds |
获取一个值,该值指示浮出控件是否显示在 XAML 根的边界内。 对于Windows 应用 SDK应用,此属性始终true。 (继承自 FlyoutBase) |
| IsOpen |
获取一个值,该值指示浮出控件是否处于打开状态。 (继承自 FlyoutBase) |
| Items |
获取用于生成菜单内容的集合。 |
| LightDismissOverlayMode |
获取或设置一个值,该值指定浅 色消除 UI 外部的区域是否变暗。 (继承自 FlyoutBase) |
| MenuFlyoutPresenterStyle |
获取或设置呈现 MenuFlyout 时使用的样式。 |
| MenuFlyoutPresenterStyleProperty |
标识 MenuFlyoutPresenterStyle 依赖项属性。 |
| OverlayInputPassThroughElement |
获取或设置一个元素,该元素应该接收指针输入事件,即使在浮出控件的覆盖之下也是如此。 (继承自 FlyoutBase) |
| Placement |
获取或设置要用于浮出控件的默认位置,相对于其放置目标。 (继承自 FlyoutBase) |
| ShouldConstrainToRootBounds |
获取或设置一个值,该值指示是否应在 XAML 根的边界内显示浮出控件。 (继承自 FlyoutBase) |
| ShowMode |
获取或设置一个值,该值指示浮出控件在显示时的行为方式。 (继承自 FlyoutBase) |
| SystemBackdrop |
获取或设置要应用于此浮出控件的系统背景。 背景呈现在浮出控件内容后面。 (继承自 FlyoutBase) |
| Target |
获取要用作浮出控件放置目标的元素。 (继承自 FlyoutBase) |
| XamlRoot |
获取或设置在其中查看此浮出控件的 XamlRoot。 (继承自 FlyoutBase) |
方法
活动
| 名称 | 说明 |
|---|---|
| Closed |
隐藏浮出控件时发生。 (继承自 FlyoutBase) |
| Closing |
浮出控件开始隐藏时发生。 (继承自 FlyoutBase) |
| Opened |
显示浮出控件时发生。 (继承自 FlyoutBase) |
| Opening |
在显示浮出控件之前发生。 (继承自 FlyoutBase) |