다음을 통해 공유


Menu 개요

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

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

메뉴 만들기

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

<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

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

InputGestureText

다음 예제는 InputGestureText 속성을 사용하여 바로 가기 키 텍스트를 MenuItem 컨트롤에 할당하는 방법을 보여 줍니다. 이렇게 해야만 메뉴 항목에 바로 가기 키가 배치됩니다. 명령을 MenuItem에 연결하지는 않습니다. 애플리케이션은 사용자 입력을 처리하여 작업을 수행해야 합니다.

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

명령

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

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

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

컨트롤 스타일 설정 기능을 사용하면 사용자 지정 컨트롤을 작성할 필요 없이 Menu 컨트롤의 모양과 동작을 변경할 수 있습니다. 시각적 속성 설정 외에도 Style을 컨트롤의 개별 파트에 적용하거나, 속성을 통해 컨트롤의 파트 동작을 변경하거나, 파트를 더 추가하거나, 컨트롤의 레이아웃을 변경할 수 있습니다. 다음 예제는 StyleMenu 컨트롤에 추가하는 여러 방법을 보여 줍니다.

첫 번째 예제는 스타일에서 현재 시스템 설정을 사용하는 방법을 보여 주는 Simple이라는 Style 스타일을 정의합니다. 코드에서는 MenuHighlightBrush의 색을 메뉴의 배경색으로 할당하고 MenuTextBrush를 메뉴의 전경색으로 할당합니다. 리소스 키를 사용하여 브러시를 할당하게 됩니다.

<Style x:Key="Simple" TargetType="{x:Type MenuItem}">
  <Setter Property = "Background" Value= "{DynamicResource {x:Static SystemColors.MenuHighlightBrushKey}}"/>
  <Setter Property = "Foreground" Value= "{DynamicResource {x:Static SystemColors.MenuTextBrushKey}}"/>
  <Setter Property = "Height" Value= "{DynamicResource {x:Static SystemParameters.CaptionHeightKey}}"/>
</Style>

다음 샘플은 Menu에서 발생하는 이벤트에 대한 응답으로 MenuItem의 모양을 변경할 수 있는 Trigger 요소를 사용합니다. Menu 위로 마우스를 이동하면 메뉴 항목의 전경색과 글꼴 특성이 변경됩니다.

<Style x:Key="Triggers" TargetType="{x:Type MenuItem}">
  <Style.Triggers>
    <Trigger Property="MenuItem.IsMouseOver" Value="true">
      <Setter Property = "Foreground" Value="Red"/>
      <Setter Property = "FontSize" Value="16"/>
      <Setter Property = "FontStyle" Value="Italic"/>
    </Trigger>
  </Style.Triggers>
</Style>

참고 항목