带有图像作为标题的MenuItem忽略对齐

时间:2016-01-24 15:53:36

标签: wpf xaml

首先,我知道在wpf中有很多关于对齐的问题,我已经阅读了其中一些,但在这种情况下似乎都没有...

我有什么

我有一个菜单,其中第三个MenuItem没有文字而是图片。确切地说,这一个:

What I have

我希望此元素为 右对齐 ,因此在查看SO中的对齐问题的一些示例和问题后,我使用以下代码:

<MenuItem HorizontalAlignment="Right" HorizontalContentAlignment="Right">
  <MenuItem.Header>
    <StackPanel>
      <Image Source="Resources/Img/donarBoton.gif" UseLayoutRounding="False" />
    </StackPanel>
  </MenuItem.Header>
</MenuItem>

问题

正如您所看到的,即使 Horizo​​ntalAlignment 设置为正确,它也不会出现在右侧。

我已经读过它并发现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>

提前致谢

1 个答案:

答案 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使用WrapPanelItemsPanel中定义的面板将用作MenuItem的容器。 WrapPanel不尊重其子女的HorizontalAlignment财产。这就是为什么我们将ItemsPanel更改为支持此功能的DockPanel