Центральный заголовок в меню управления

Как вертикально центрировать заголовок в элементе управления меню?

Это была моя попытка:

<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>

Текст заголовка «файл» по-прежнему не центрирован по вертикали (это то, что я хочу центрировать). Что именно центрирует этот код? Это текст «открыть»?

[/РЕДАКТИРОВАТЬ]


person Yustme    schedule 21.04.2012    source источник


Ответы (2)


Если вы хотите отформатировать заголовок, вам нужно явно разместить элемент управления заголовком:

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

Обновление. Чтобы отформатировать положение элемента меню в меню, вам необходимо переопределить шаблон ItemsPanelTemplate меню. По умолчанию в меню используется вертикальная панель 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.

person Dan Busha    schedule 21.04.2012
comment
привет, я отредактировал свой оригинальный пост. Текст заголовка меню не центрирован с этим кусочком кода. Может вы меня неправильно поняли? - person Yustme; 22.04.2012
comment
вы правы, я вас неправильно понял, но я обновил свой ответ тем, что, как мне кажется, вы ищете. Сегодня узнал кое-что новое, так что спасибо за вопрос! - person Dan Busha; 22.04.2012