Menu
弹出菜单与菜单栏:Menu、ContextMenu 与 MenuFlyout。
示例可交互
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>