다음을 통해 공유


메뉴

Menu 클래스를 사용하면 명령 및 이벤트 처리기와 연결된 요소를 계층적 순서로 구성할 수 있습니다. 각 Menu 요소에는 MenuItem 요소의 모음이 포함됩니다.

여러 MenuItem 컨트롤이 있는 메뉴 컨트롤을 보여 주는 스크린샷

스타일 및 템플릿

기본 ControlTemplate을 변경하여 Menu 컨트롤에 고유한 모양을 줄 수 있습니다. 자세한 내용은 스타일 및 템플릿이란?컨트롤에 대한 템플릿을 만드는 방법을 참조하세요.

콘텐츠 속성

컨트롤은 MenuItems 해당 속성을 콘텐츠 속성으로 사용합니다. 이 속성을 사용하면 사용자와 상호 작용할 수 있는 MenuItem 요소 컬렉션으로 Menu을 채울 수 있습니다.

파트

컨트롤에 Menu 명명된 부분이 없습니다.

Menu용으로 ControlTemplate을(를) 만들 때, 템플릿에 ScrollViewer 내에 ItemsPresenter을 포함할 수 있습니다. ItemsPresenter 각 항목을 Menu에 표시하며, ScrollViewer는 컨트롤 내에서 스크롤을 가능하게 합니다. ItemsPresenterScrollViewer의 직접 자식이 아닌 경우, ItemsPresenter에 이름을 ItemsPresenter로 지정해야 합니다.

시각적 상태

다음 표에서는 컨트롤의 시각적 상태를 나열합니다 Menu .

VisualState 이름 VisualStateGroup 이름 Description
유효 검증 상태 컨트롤은 Validation 클래스를 사용하고, Validation.HasError 연결된 속성은 false입니다.
유효하지 않은 포커스 검증 상태 Validation.HasError 연결된 속성은 true 컨트롤이 포커스를 가지고 있는지 여부를 나타냅니다.
잘못된포커스없음 검증 상태 Validation.HasError 연결된 속성에 true 포커스가 없는 컨트롤이 있습니다.

주요 개념

컨트롤을 사용할 때는 다음과 같은 개념이 중요합니다 Menu .

바로 가기 키는 명령을 호출 Menu 하기 위해 키보드로 입력할 수 있는 문자 조합입니다. 예를 들어 복사 의 바로 가기는 Ctrl+C입니다. 바로 가기 키와 메뉴 항목InputGestureTextCommand에 사용할 속성은 두 가지가 있습니다.

입력 제스처 텍스트

InputGestureText 속성을 사용하여 단축키 텍스트를 MenuItem 컨트롤에 할당합니다. 메뉴 항목에 바로 가기 키만 배치합니다. 명령을 MenuItem.와 연결하지 않습니다. 애플리케이션은 작업을 수행하려면 사용자의 입력을 처리해야 합니다.

Command

속성을 Command 사용하여 열기저장 과 같은 명령을 컨트롤과 MenuItem 연결합니다. 명령 속성은 MenuItem에 명령을 연결할 뿐만 아니라 바로 가기로 사용할 입력 제스처 텍스트도 제공합니다.

클래스에는 MenuItem 명령이 CommandTarget 발생하는 요소를 지정하는 속성도 있습니다. 설정되지 않은 경우 CommandTarget 키보드 포커스가 있는 요소가 명령을 받습니다. 명령에 대한 자세한 내용은 명령 개요를 참조하세요.

예시

다음 예제에서는 다양한 시나리오에서 컨트롤을 Menu 사용하는 방법을 보여 줍니다.

메뉴 만들기

컨트롤은 Menu 애플리케이션에 대 한 명령 또는 옵션을 지정 하는 항목의 목록을 표시 합니다. 일반적으로 MenuItem를 클릭하면 하위 메뉴가 열리거나 애플리케이션에서 명령이 실행됩니다.

다음 예제에서는 TextBox 안에서 텍스트를 조작할 수 있는 Menu를 만듭니다. Menu에는 Unchecked 개체가 Click 포함되며, 이 개체들은 MenuItem, Command, IsCheckable 속성과 Header, Checked, Unchecked 이벤트를 사용합니다.

<Menu>
  <MenuItem Header="_Edit">
    <MenuItem Command="ApplicationCommands.Copy"/>
    <MenuItem Command="ApplicationCommands.Cut"/>
    <MenuItem Command="ApplicationCommands.Paste"/>
  </MenuItem>
  <MenuItem Header="_Font">
    <MenuItem Header="_Bold" IsCheckable="True"
              Checked="Bold_Checked"
              Unchecked="Bold_Unchecked"/>
    <MenuItem Header="_Italic" IsCheckable="True"
              Checked="Italic_Checked"
              Unchecked="Italic_Unchecked"/>
    <Separator/>
    <MenuItem Header="I_ncrease Font Size"
              Click="IncreaseFont_Click"/>
    <MenuItem Header="_Decrease Font Size"
              Click="DecreaseFont_Click"/>
  </MenuItem>
</Menu>
<TextBox Name="textBox1" TextWrapping="Wrap"
         Margin="2">
  The quick brown fox jumps over the lazy dog.
</TextBox>

private void Bold_Checked(object sender, RoutedEventArgs e)
{
    textBox1.FontWeight = FontWeights.Bold;
}

private void Bold_Unchecked(object sender, RoutedEventArgs e)
{
    textBox1.FontWeight = FontWeights.Normal;
}

private void Italic_Checked(object sender, RoutedEventArgs e)
{
    textBox1.FontStyle = FontStyles.Italic;
}

private void Italic_Unchecked(object sender, RoutedEventArgs e)
{
    textBox1.FontStyle = FontStyles.Normal;
}

private void IncreaseFont_Click(object sender, RoutedEventArgs e)
{
    if (textBox1.FontSize < 18)
    {
        textBox1.FontSize += 2;
    }
}

private void DecreaseFont_Click(object sender, RoutedEventArgs e)
{
    if (textBox1.FontSize > 10)
    {
        textBox1.FontSize -= 2;
    }
}

Private Sub Bold_Checked(ByVal sender As Object, ByVal e As RoutedEventArgs)
    textBox1.FontWeight = FontWeights.Bold
End Sub

Private Sub Bold_Unchecked(ByVal sender As Object, ByVal e As RoutedEventArgs)
    textBox1.FontWeight = FontWeights.Normal
End Sub

Private Sub Italic_Checked(ByVal sender As Object, ByVal e As RoutedEventArgs)
    textBox1.FontStyle = FontStyles.Italic
End Sub

Private Sub Italic_Unchecked(ByVal sender As Object, ByVal e As RoutedEventArgs)
    textBox1.FontStyle = FontStyles.Normal
End Sub

Private Sub IncreaseFont_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    If textBox1.FontSize < 18 Then
        textBox1.FontSize += 2
    End If
End Sub

Private Sub DecreaseFont_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    If textBox1.FontSize > 10 Then
        textBox1.FontSize -= 2
    End If
End Sub

MenuItems와 함께 InputGestureText 사용

다음 예제는 InputGestureText 속성을 사용하여 MenuItem 컨트롤에 키보드 바로 가기 텍스트를 할당하는 방법을 보여줍니다.

<MenuItem Header="_Cut" InputGestureText="Ctrl+X"/>
<MenuItem Header="_Find" InputGestureText="Ctrl+F"/>

MenuItems에서 Command 속성 사용

다음 예제에서는 속성을 사용하여 Command열기저장 명령을 컨트롤과 MenuItem 연결하는 방법을 보여 줍니다.

<MenuItem Header="_Open" Command="ApplicationCommands.Open"/>
<MenuItem Header="_Save" Command="ApplicationCommands.Save"/>

참고하십시오