programing

WPF의 '도움말' 메뉴 항목을 오른쪽 정렬하려면 어떻게 해야 합니까?

mailnote 2023. 4. 16. 15:30
반응형

WPF의 '도움말' 메뉴 항목을 오른쪽 정렬하려면 어떻게 해야 합니까?

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>

메뉴 항목이 몇 개인지 항상 알고 있다면(그 때문에 이 답변이 취약해진다) 다른 가능한 답변은 메뉴를 정의하는 것입니다.항목패널을 그리드로 설정하고 메뉴를 스트레치로 설정하고 그리드를 설정합니다.ColumnDefinitions를 적절하게 MenuItems를 적절한 그리드로 설정합니다.열을 지정하고 마지막 메뉴 항목의 수평 정렬을 오른쪽으로 설정합니다.

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

원래 답변을 변경합니다. (HorizontalAlignment="Stretch"를 사용하면) Edit(편집) 메뉴가 메뉴 표시줄을 가로질러 Help(도움말) 메뉴까지 확장됩니다.

또한 Rockke의 하위 메뉴 정렬 제안을 통합하는 중...

<Menu Height="20" Background="#FFA9D1F4">
        <Menu.ItemsPanel>
            <ItemsPanelTemplate>
                <DockPanel/>
            </ItemsPanelTemplate>
        </Menu.ItemsPanel>
        <MenuItem Header="File">
            <MenuItem Header="Exit"/>
        </MenuItem>
        <MenuItem Header="Edit">
            <MenuItem Header="Cut"/>
        </MenuItem>
        <MenuItem Header="_Help" HorizontalAlignment="Right" FlowDirection="RightToLeft">
            <MenuItem Header="About..." FlowDirection="LeftToRight"/>
        </MenuItem>
    </Menu>
<Menu DockPanel.Dock="Top">
  <Menu.ItemsPanel>
    <ItemsPanelTemplate>
      <DockPanel HorizontalAlignment="Stretch"/>
    </ItemsPanelTemplate>
  </Menu.ItemsPanel>
  <MenuItem Header="_File">
    <MenuItem Click="Exit_Clicked" Header="E_xit" />
  </MenuItem>
  <MenuItem Header="_User">
    <MenuItem Click="ChangePassword_Clicked" Header="_Change Password..." />
  </MenuItem>
  <!-- Right adjusted help menu with sub menu keeping inside the main window -->
  <MenuItem Header="_Help" HorizontalAlignment="Right" FlowDirection="RightToLeft">
    <MenuItem Click="About_Clicked" Header="_About..." FlowDirection="LeftToRight" />
  </MenuItem>
</Menu>

원래 답변에 약간의 추가 사항만 있습니다.두 가지 흐름 방향을 포함하면 하위 메뉴가 창 안에 유지됩니다.

쉬운 방법은 없을 것 같아요.메뉴는 모든 항목을 한쪽에 유지하며 메뉴의 수평 컨텐츠 정렬 또는 MenuItem의 수평 정렬도 무시합니다.

하지만 해결 방법을 찾을 수 있습니다.마진 속성은 기능합니다.따라서 Help Menu Item의 여백을 Menu의 폭에 바인딩할 수 있습니다.그러나 폭에서 마진을 계산하려면 변환기를 사용해야 합니다.

나는 그런 일을 하는 것이 좋은 것인지 모르겠다.난 안 그럴 거야하지만 정말 원한다면, 그렇게 해야 해요.

기본 WrapPanel 대신 DockPanel 또는 Grid를 사용할 경우 한 가지 또는 두 가지 잠재적인 단점이 있습니다.

  1. 창이 너무 작아서 모든 메뉴 항목을 한 줄에 표시할 수 없는 경우 다음 줄로 줄 바꿈되지 않습니다.
  2. ContextMenu 등 다른 컨텍스트에서 사용하기 위해 메뉴 항목을 공유하는 경우 마지막 항목은 오른쪽 정렬됩니다.

언급URL : https://stackoverflow.com/questions/3023638/how-do-i-right-align-the-help-menu-item-in-wpf

반응형