当最右边的菜单项无法在屏幕上显示时,我不清楚您想要发生什么。是吗?:
- 将它们包装到下一行
- 完全裁剪它们
- 部分裁剪它们
- 将它们放在溢出下拉列表中?
- 显示椭圆或其他“更多”指示器?
a的默认ItemsPanel
模板Menu
使用WrapPanel
... 应该将它们包装到下一行(除非您为菜单设置了高度,或者您的菜单位于不允许其具有所需高度的容器中)。
我们可以更改用于更改项目布局方式的 ItemsPanel。
在下面的示例 XAML 中,我展示了 4 种显示菜单的方法。您可以在 Kaxaml 中使用它来查看不同的行为...将 Window 调整为较小的宽度,以查看当水平空间不足时会发生什么。
- 原始菜单样式...包装不适合的菜单项
- 完全裁剪不适合的菜单项的菜单
- 部分裁剪不适合的菜单项的菜单
- 使用工具栏的菜单...任何不适合进入溢出面板的项目
(请注意,此示例并不完美...它不完全符合鼠标/键盘的标准菜单选择行为,因为它为每个项目使用单独的菜单......风格有点偏离......它显示了一个工具栏抓手......需要更多的工作)。
如果 4 最接近您想要的,那么您需要以某种方式将行为或工具栏与其溢出面板...与菜单的行为以及菜单项之间的跟踪/导航相结合。
您可以通过创造性地重新模板化菜单或工具栏或创建自己的自定义控件来实现这一点。
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">
<StackPanel Orientation="Vertical">
<Menu>
<MenuItem Header="_File">
<MenuItem Header="_Exit"/>
</MenuItem>
<MenuItem Header="_Edit"/>
<MenuItem Header="_Window"/>
</Menu>
<Menu>
<Menu.ItemsPanel>
<ItemsPanelTemplate>
<ToolBarPanel IsItemsHost="True" Orientation="Horizontal"/>
</ItemsPanelTemplate>
</Menu.ItemsPanel>
<MenuItem Header="_File">
<MenuItem Header="_Exit"/>
</MenuItem>
<MenuItem Header="_Edit"/>
<MenuItem Header="_Window"/>
</Menu>
<Menu>
<Menu.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel IsItemsHost="True" Orientation="Horizontal"/>
</ItemsPanelTemplate>
</Menu.ItemsPanel>
<MenuItem Header="_File">
<MenuItem Header="_Exit"/>
</MenuItem>
<MenuItem Header="_Edit"/>
<MenuItem Header="_Window"/>
</Menu>
<ToolBar>
<ToolBar.Resources>
<Style x:Key="MenuItemStyle" TargetType="{x:Type MenuItem}">
<Style.Triggers>
<Trigger Property="Role" Value="TopLevelHeader">
<Setter Property="Template"
Value="{StaticResource {x:Static MenuItem.SubmenuHeaderTemplateKey}}"/>
</Trigger>
</Style.Triggers>
</Style>
</ToolBar.Resources>
<Menu>
<MenuItem Header="_File">
<MenuItem Header="_Exit"/>
</MenuItem>
</Menu>
<Menu>
<MenuItem Header="_Edit"/>
</Menu>
<Menu>
<MenuItem Header="_Window"/>
</Menu>
</ToolBar>
</StackPanel>
</Window>