Menu 개요
업데이트: 2007년 11월
Menu 클래스를 사용하면 명령 및 이벤트 처리기와 연결된 요소를 계층적 순서로 구성할 수 있습니다. 각 Menu 요소에는 MenuItem 요소의 컬렉션이 포함됩니다.
이 항목에는 다음 단원이 포함되어 있습니다.
- Menu 컨트롤
- 메뉴 만들기
- 바로 가기 키가 있는 MenuItem
- 메뉴 스타일 설정
- 관련 항목
Menu 컨트롤
Menu 컨트롤은 응용 프로그램의 명령 또는 옵션을 지정하는 항목 목록을 나타냅니다. 일반적으로 MenuItem을 클릭하면 하위 메뉴가 열리거나 응용 프로그램에서 명령을 수행합니다.
메뉴 만들기
다음 예제에서는 Menu를 만들어 TextBox에서 텍스트를 조작합니다. 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 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
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;
}
}
바로 가기 키가 있는 MenuItem
바로 가기 키는 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을 컨트롤의 개별 부분에 적용하거나, 속성을 통해 컨트롤의 부분 동작을 변경하거나, 추가 부분을 추가하거나, 컨트롤의 레이아웃을 변경할 수 있습니다. 다음 예제에서는 Menu 컨트롤에 Style을 추가하는 몇 가지 방법을 보여 줍니다.
첫 번째 코드 예제에서는 사용자 스타일에서 현재 시스템 설정을 사용하는 방법을 보여 주는 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>