我的XAML文件中有以下(简化的)部分:
<Menu Width="Auto" Height="20" Background="#FFA9D1F4" DockPanel.Dock="Top">
<MenuItem Header="File">
<MenuItem Header="Exit"/>
</MenuItem>
<MenuItem Header="Edit">
<MenuItem Header="Cut"/>
</MenuItem>
<MenuItem Header="Help">
<MenuItem Header="About"/>
</MenuItem>
</Menu>
,结果是:
+-------------------------------------------+
| File Edit Help |
+-------------------------------------------+
| |
如果我想要右侧的Help
菜单项,我该怎么办?
+-------------------------------------------+
| File Edit Help |
+-------------------------------------------+
| |
答案 0 :(得分:73)
按照相同的原则,这次你不需要网格,因此不需要知道项目的数量。除了帮助之外,将所有项目分配到左侧:)
<Menu Height="20" Background="#FFA9D1F4">
<Menu.ItemsPanel>
<ItemsPanelTemplate>
<DockPanel HorizontalAlignment="Stretch"/>
</ItemsPanelTemplate>
</Menu.ItemsPanel>
<MenuItem Header="File">
<MenuItem Header="Exit"/>
</MenuItem>
<MenuItem Header="Edit">
<MenuItem Header="Cut"/>
</MenuItem>
<MenuItem Header="Help" HorizontalAlignment="Right">
<MenuItem Header="About"/>
</MenuItem>
</Menu>
答案 1 :(得分:5)
另一个可能的答案是,如果你总是知道会有多少菜单项(这会使这个答案变得脆弱),就是将Menu.ItemsPanel定义为网格,将Menu设置为Stretch,适当地设置Grid.ColumnDefinitions ,将MenuItems设置为适当的Grid.Column,并将最后一个菜单项的HorizontalAlignment设置为Right。
<Menu Height="20" Background="#FFA9D1F4" DockPanel.Dock="Top" HorizontalAlignment="Stretch">
<Menu.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</Menu.ItemsPanel>
<MenuItem Header="File" Grid.Column="0">
<MenuItem Header="Exit"/>
</MenuItem>
<MenuItem Header="Edit" Grid.Column="1">
<MenuItem Header="Cut"/>
</MenuItem>
<MenuItem Header="Help" Grid.Column="2" HorizontalAlignment="Right">
<MenuItem Header="About"/>
</MenuItem>
</Menu>
答案 2 :(得分:3)
更改原始答案,因为它(使用HorizontalAlignment =“Stretch”),编辑菜单将一直延伸到菜单栏的“帮助”菜单。
还纳入了Rokke的子菜单对齐建议......
<Menu Height="20" Background="#FFA9D1F4">
<Menu.ItemsPanel>
<ItemsPanelTemplate>
<DockPanel/>
</ItemsPanelTemplate>
</Menu.ItemsPanel>
<MenuItem Header="File">
<MenuItem Header="Exit"/>
</MenuItem>
<MenuItem Header="Edit">
<MenuItem Header="Cut"/>
</MenuItem>
<MenuItem Header="_Help" HorizontalAlignment="Right" FlowDirection="RightToLeft">
<MenuItem Header="About..." FlowDirection="LeftToRight"/>
</MenuItem>
</Menu>
答案 3 :(得分:1)
我认为没有一种简单的方法。菜单将所有项目保留在一侧,甚至忽略菜单的HorizontalContentAlignment或MenuItem的HorizontalAlignment。
但你可以做一个解决方法。保证金属性有效。所以我认为你可以将Help MenuItem的边距绑定到菜单的宽度。但是你必须使用转换器来计算宽度的余量。
我不知道做这样的事情是否好。我不会。但如果你真的想要它,那就是应该有效的方法。
答案 4 :(得分:1)
<Menu DockPanel.Dock="Top">
<Menu.ItemsPanel>
<ItemsPanelTemplate>
<DockPanel HorizontalAlignment="Stretch"/>
</ItemsPanelTemplate>
</Menu.ItemsPanel>
<MenuItem Header="_File">
<MenuItem Click="Exit_Clicked" Header="E_xit" />
</MenuItem>
<MenuItem Header="_User">
<MenuItem Click="ChangePassword_Clicked" Header="_Change Password..." />
</MenuItem>
<!-- Right adjusted help menu with sub menu keeping inside the main window -->
<MenuItem Header="_Help" HorizontalAlignment="Right" FlowDirection="RightToLeft">
<MenuItem Click="About_Clicked" Header="_About..." FlowDirection="LeftToRight" />
</MenuItem>
</Menu>
只是原始答案的一小部分。包括两个流向使子菜单保持在窗口内。
答案 5 :(得分:0)
使用DockPanel或Grid,而不是默认的WrapPanel,有一个或许两个潜在的缺点。