跳到正文
浏览文档

Menu

弹出菜单与菜单栏:Menu、ContextMenu 与 MenuFlyout。

示例可交互
Menu — Avalonia UIKit
Live demo unavailable
<Panel MinWidth="400" MinHeight="260">
  <Menu VerticalAlignment="Top">
    <MenuItem Header="File">
      <MenuItem Header="New File" InputGesture="Ctrl+N" />
      <MenuItem Header="Open Recent">
        <MenuItem Header="Avalonia UIKit" />
        <MenuItem Header="Sample App" />
      </MenuItem>
      <Separator />
      <MenuItem Header="Save" InputGesture="Ctrl+S" />
      <MenuItem Header="Save As…" IsEnabled="False" />
      <Separator />
      <MenuItem Header="Quit" />
    </MenuItem>
    <MenuItem Header="Edit">
      <MenuItem Header="Undo" InputGesture="Ctrl+Z" />
      <MenuItem Header="Redo" InputGesture="Ctrl+Shift+Z" />
      <Separator />
      <MenuItem Header="Word Wrap" ToggleType="CheckBox" IsChecked="True" />
    </MenuItem>
    <MenuItem Header="View">
      <MenuItem Header="Zoom In" />
      <MenuItem Header="Zoom Out" />
    </MenuItem>
  </Menu>
</Panel>

用法

主题覆盖 Menu、MenuItem、ContextMenu 与 MenuFlyoutPresenter:带细线描边和阴影的浮层表面,26px 高的条目、彼此间隔 2px;当任一条目带 Icon 或勾选标记时会留出图标列;支持 ToggleType="CheckBox" 与 "Radio" 条目、带折叠箭头的子菜单、Separator,以及以快捷键形式展示的 InputGesture。Menu 是绘制在窗口内的菜单栏:它的顶层条目是小号 ghost 按钮,展开时显示为选中状态。

有两项设置留给应用自行处理。子菜单在悬停时立即打开:请在启动时把 DefaultMenuInteractionHandler.MenuShowDelay 设为 0,否则 Avalonia 会先等待:

Avalonia.Controls.Platform.DefaultMenuInteractionHandler.MenuShowDelay = TimeSpan.Zero;

另外,用 Placement="BottomEdgeAlignedLeft" 打开 MenuFlyout(拆分按钮使用 BottomEdgeAlignedRight):呈现器会与触发器保持 4px 间距。ContextMenu 在指针处打开。菜单打开或获得焦点时,Avalonia 会选中第一个条目;主题让该选中状态呈现悬停外观。

示例

控件上的 ContextMenu:图标、快捷键、勾选条目、分隔线、禁用条目以及子菜单。

上下文菜单可交互
Live demo unavailable
<Panel MinWidth="420" MinHeight="260">
  <Border Width="200" Height="64" BorderThickness="1" CornerRadius="6" Background="Transparent"
          BorderBrush="{DynamicResource UIKit.Border}" HorizontalAlignment="Left" VerticalAlignment="Top">
    <Border.ContextMenu>
      <ContextMenu>
        <MenuItem Header="Copy" InputGesture="Ctrl+C">
          <MenuItem.Icon>
            <PathIcon Data="{StaticResource UIKit.Icon.Copy}" />
          </MenuItem.Icon>
        </MenuItem>
        <MenuItem Header="Paste" InputGesture="Ctrl+V" />
        <MenuItem Header="Word Wrap" ToggleType="CheckBox" IsChecked="True" />
        <Separator />
        <MenuItem Header="Rename" IsEnabled="False" />
        <MenuItem Header="Share">
          <MenuItem Header="Copy Link" />
          <MenuItem Header="Email" />
        </MenuItem>
      </ContextMenu>
    </Border.ContextMenu>
    <TextBlock Text="Right-click here" HorizontalAlignment="Center" VerticalAlignment="Center" />
  </Border>
</Panel>

下拉菜单:带 MenuFlyout 的 Button,在其左边缘下方打开。

下拉菜单可交互
Live demo unavailable
<Panel MinWidth="360" MinHeight="260">
  <Button Classes="outline" HorizontalAlignment="Left" VerticalAlignment="Top">
    <StackPanel Orientation="Horizontal" Spacing="8">
      <TextBlock Text="Open" />
      <PathIcon Classes="small" Data="{StaticResource UIKit.Icon.ChevronDown}" />
    </StackPanel>
    <Button.Flyout>
      <MenuFlyout Placement="BottomEdgeAlignedLeft">
        <MenuItem Header="New File" />
        <MenuItem Header="Refresh" InputGesture="F5" />
        <MenuItem Header="Word Wrap" ToggleType="CheckBox" IsChecked="True" />
        <Separator />
        <MenuItem Header="Rename" IsEnabled="False" />
        <MenuItem Header="Edit">
          <MenuItem Header="Copy" />
          <MenuItem Header="Paste" />
        </MenuItem>
      </MenuFlyout>
    </Button.Flyout>
  </Button>
</Panel>