Как делают меня выравнивание по правому краю пункт меню 'справки' в WPF?

У меня есть следующий (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 |
+-------------------------------------------+
|                                           |
45
задан paxdiablo 11 June 2010 в 14:33
поделиться

3 ответа

Следуя тому же принципу, на этот раз вам не нужна сетка и, следовательно, не нужно знать количество элементов. Назначьте все элементы слева, кроме справки :)

<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>
74
ответ дан 26 November 2019 в 21:13
поделиться

Другой возможный ответ, если вы всегда знаете, сколько пунктов меню будет (и это делает этот ответ хрупким), - определить 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>
7
ответ дан 26 November 2019 в 21:13
поделиться

Я не думаю, что есть простой способ. Меню держит все элементы на одной стороне и даже игнорирует HorizontalContentAlignment меню или HorizontalAlignment MenuItem.

Но вы можете сделать обходной путь. Свойство margin работает. Поэтому я думаю, что можно привязать margin элемента Help MenuItem к ширине меню. Но вам придется использовать конвертер для вычисления margin из ширины.

Я не знаю, хорошо ли делать что-то подобное. Я бы не стал. Но если вы действительно этого хотите, то этот способ должен сработать.

1
ответ дан 26 November 2019 в 21:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: