У меня есть следующий (simplifed) раздел в моем файле 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 |
+-------------------------------------------+
| |
Следуя тому же принципу, на этот раз вам не нужна сетка и, следовательно, не нужно знать количество элементов. Назначьте все элементы слева, кроме справки :)
<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>
Другой возможный ответ, если вы всегда знаете, сколько пунктов меню будет (и это делает этот ответ хрупким), - определить 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>
Я не думаю, что есть простой способ. Меню держит все элементы на одной стороне и даже игнорирует HorizontalContentAlignment меню или HorizontalAlignment MenuItem.
Но вы можете сделать обходной путь. Свойство margin работает. Поэтому я думаю, что можно привязать margin элемента Help MenuItem к ширине меню. Но вам придется использовать конвертер для вычисления margin из ширины.
Я не знаю, хорошо ли делать что-то подобное. Я бы не стал. Но если вы действительно этого хотите, то этот способ должен сработать.