我有一个接收动态ItemsSource的菜单。物品的数量及其长度会不时变化。
<Menu ItemsSource="{loc:CustomBinding CurrentMenuItems}" />
菜单的方向为水平,有时会导致菜单溢出。
菜单项模板:
<ControlTemplate TargetType="{x:Type MenuItem}">
<TextBlock Text="{loc:CustomBinding Title}"
MaxWidth="200"
TextTrimming="CharacterEllipsis"/>
</ControlTemplate>
当项目超过4个时,菜单会溢出屏幕左侧 (抱歉无法从工作场所上传图片)。
WPF菜单中是否有内置的溢出选项?
是否可以选择控制菜单本身的菜单项溢出? ItemsMaxLength
的某些东西,我可以绑定到计算字段?
答案 0 :(得分:0)
当最右边的菜单项不适合屏幕时,我不清楚你想要发生什么。是吗?:
ItemsPanel
的默认Menu
模板使用WrapPanel
...应将它们包装到下一行(除非您为菜单设置了高度,否则菜单就是在容器中,它不允许它具有所需的高度。)
我们可以更改用于更改项目布局方式的ItemsPanel。
在下面的示例XAML中,我展示了4种显示菜单的方法。您可以在Kaxaml中使用它来查看不同的行为...将窗口调整为较小的宽度,以查看当没有足够的水平空间时会发生什么。
如果4最接近你想要的,那么你需要将行为或ToolBar与它的溢出面板结合起来...与菜单的行为及其在菜单项之间的跟踪/导航。
您可以通过创造性地重新模板化菜单,工具栏或创建自己的自定义控件来实现这一目标。
<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>