在菜单控件中居中标题头

6

如何在菜单控件中垂直居中标题?

这是我的尝试:

<MenuItem Header="File" StaysOpenOnClick="True" FontFamily="Arial" VerticalAlignment="Center">
                <MenuItem Header="Open" Click="Open_Click" IsEnabled="True"/>
            </MenuItem>
        </Menu>

但是它对齐到了左上角。

我做错了什么?

[编辑]

我的整个菜单现在看起来像这样:

<Menu Canvas.Left="0" Canvas.Top="0" Name="menu1" Margin="0,0,0,384">
        <MenuItem Header="File" StaysOpenOnClick="True" FontFamily="Arial" VerticalAlignment="Center">
            <MenuItem Click="Open_Click" IsEnabled="True">
                <MenuItem.Header>
                    <TextBlock Text="Open" VerticalAlignment="Center"/>
                </MenuItem.Header>
            </MenuItem>
        </MenuItem>
        </Menu>

标题文本"文件(file)"仍未垂直居中(这就是我想要的居中效果)。此代码到底是居中什么?是文本 "打开(open)" 吗?

[/编辑]

2个回答

10

如果您想格式化标题,您需要显式地布局标题控件:

<MenuItem StaysOpenOnClick="True" FontFamily="Arial" VerticalAlignment="Center">
      <MenuItem Click="Open_Click" IsEnabled="True">
          <MenuItem.Header>
              <TextBlock Text="Open" VerticalAlignment="Center"/>
          </MenuItem.Header>
      </MenuItem>
  </Menu>

更新: 要格式化菜单中 MenuItem 的位置,您需要覆盖 Menu 的 ItemsPanelTemplate。默认情况下,Menu 使用一个垂直的 WrapPanel 将项目对齐到顶部。将默认值替换为您选择的面板(StackPanel、Grid、DockPanel 等),您就可以自由地居中菜单项了。这里是一个示例:

<Menu Canvas.Left="0" Canvas.Top="0" Name="menu1" Margin="0,0,0,384">
    <Menu.ItemsPanel>
        <ItemsPanelTemplate>
            <Grid/>
        </ItemsPanelTemplate>
    </Menu.ItemsPanel>
    <MenuItem Header="File" StaysOpenOnClick="True" FontFamily="Arial" VerticalAlignment="Center" >
        <MenuItem Header="Open" Click="Open_Click" IsEnabled="True"/>
    </MenuItem>
</Menu>

此处提供的信息来自于MSDN上的这篇帖子


2
嗨,我编辑了我的原始帖子。这段代码不能使菜单的标题文本居中。也许你误解了我的意思? - Yustme
你说得对,我确实误解了你的意思,但是我已经更新了我的答案,加入了我认为你需要的内容。今天学到了新东西,所以感谢你的问题! - Dan Busha

0

我认为您想要设置VerticalContentAlignment。如果对齐仍然不符合您的喜好,那么可能是默认MenuItem Template存在问题,它可能无法绑定到属性,或者存在一些边距或填充会使标题偏移。


嗨,我也使用了那个属性,而且没有使用任何模板。你能否给出一个例子,说明你所说的模板是什么? - Yustme
@Yustme:这是一个属性,它定义了控件由哪些内部元素组成,从而决定了其外观。请参阅属性文档和此概述 - H.B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接