首先,我知道在wpf中有很多关于对齐的问题,我已经阅读了其中一些,但在这种情况下似乎都没有...
我有一个菜单,其中第三个MenuItem
没有文字而是图片。确切地说,这一个:
我希望此元素为 右对齐 ,因此在查看SO中的对齐问题的一些示例和问题后,我使用以下代码:
<MenuItem HorizontalAlignment="Right" HorizontalContentAlignment="Right">
<MenuItem.Header>
<StackPanel>
<Image Source="Resources/Img/donarBoton.gif" UseLayoutRounding="False" />
</StackPanel>
</MenuItem.Header>
</MenuItem>
正如您所看到的,即使 HorizontalAlignment 设置为正确,它也不会出现在右侧。
我已经读过它并发现Menu
所在的位置,需要将相同的属性设置为拉伸,我也尝试过没有成功。我甚至尝试使用菜单所在的DockPanel
(只是为了尝试,我还不习惯WPF),但它也没有做任何事情。
我也试图在我的图片元素之后添加一个文本元素,以便查看问题是MenuItem
还是我的配置中的任何其他内容,但它没有移动在右边。
我做错了什么?
有完整的DockPanel
代码:
<DockPanel x:Name="superiorDock" Height="25" LastChildFill="False" VerticalAlignment="Top" Width="307">
<Menu x:Name="superiorMenu" Width="307" Height="25" DockPanel.Dock="Top" HorizontalAlignment="Stretch" >
<MenuItem Header="{Binding XPath=@topMenu_1}">
<MenuItem Header="{Binding XPath=@topMenu_2}"/>
<MenuItem Header="{Binding XPath=@topMenu_3}"/>
<Separator/>
<MenuItem Header="{Binding XPath=@topMenu_4}"/>
<Separator/>
<MenuItem Header="{Binding XPath=@topMenu_5}"/>
</MenuItem>
<MenuItem Header="{Binding XPath=@topMenu_6}">
<MenuItem Header="{Binding XPath=@topMenu_7}"/>
<Separator/>
<MenuItem Header="{Binding XPath=@topMenu_8}"/>
</MenuItem>
<MenuItem HorizontalAlignment="Right" HorizontalContentAlignment="Right">
<MenuItem.Header>
<StackPanel>
<Image Source="Resources/Img/donarBoton.gif" UseLayoutRounding="False" />
</StackPanel>
</MenuItem.Header>
</MenuItem>
</Menu>
</DockPanel>
提前致谢
答案 0 :(得分:1)
使用此:
<DockPanel x:Name="superiorDock" Height="25" LastChildFill="False" VerticalAlignment="Top" Width="307">
<Menu x:Name="superiorMenu" Width="307" Height="25" DockPanel.Dock="Top" HorizontalAlignment="Stretch">
<Menu.ItemsPanel>
<ItemsPanelTemplate>
<DockPanel HorizontalAlignment="Stretch" />
</ItemsPanelTemplate>
</Menu.ItemsPanel>
<MenuItem Header="{Binding XPath=@topMenu_1}">
<MenuItem Header="{Binding XPath=@topMenu_2}"/>
<MenuItem Header="{Binding XPath=@topMenu_3}"/>
<Separator/>
<MenuItem Header="{Binding XPath=@topMenu_4}"/>
<Separator/>
<MenuItem Header="{Binding XPath=@topMenu_5}"/>
</MenuItem>
<MenuItem Header="{Binding XPath=@topMenu_6}">
<MenuItem Header="{Binding XPath=@topMenu_7}"/>
<Separator/>
<MenuItem Header="{Binding XPath=@topMenu_8}"/>
</MenuItem>
<MenuItem HorizontalAlignment="Right">
<MenuItem.Header>
<StackPanel>
<Image Source="Resources/Img/donarBoton.gif" UseLayoutRounding="False" />
</StackPanel>
</MenuItem.Header>
</MenuItem>
</Menu>
</DockPanel>
ItemsPanel
的默认Menu
使用WrapPanel
。 ItemsPanel
中定义的面板将用作MenuItem
的容器。
WrapPanel
不尊重其子女的HorizontalAlignment
财产。这就是为什么我们将ItemsPanel
更改为支持此功能的DockPanel
。