Udostępnij za pośrednictwem


Przegląd menu

Klasa Menu umożliwia organizowanie elementów skojarzonych z poleceniami i procedurami obsługi zdarzeń w kolejności hierarchicznej. Każdy element Menu zawiera kolekcję elementów MenuItem.

Kontrolka Menu przedstawia listę elementów, które określają polecenia lub opcje dla aplikacji. Zazwyczaj kliknięcie MenuItem otwiera podmenu lub powoduje wykonanie polecenia przez aplikację.

Tworzenie menu

Poniższy przykład pokazuje, jak utworzyć Menu w celu manipulacji tekstem w TextBox. Menu zawiera obiekty MenuItem, które używają właściwości Command, IsCheckablei Header oraz zdarzeń Checked, Uncheckedi Click.

<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

Skróty klawiaturowe to kombinacje znaków, które można wprowadzić za pomocą klawiatury do wywoływania Menu poleceń. Na przykład skrótem do Copy jest CTRL+C. Istnieją dwie właściwości używane z skrótami klawiaturowymi i elementami menu —InputGestureText lub Command.

Tekst gestu wejściowego

W poniższym przykładzie pokazano, jak za pomocą właściwości InputGestureText przypisać tekst skrótu klawiaturowego do kontrolek MenuItem. To powoduje jedynie umieszczenie skrótu klawiaturowego w elemencie menu. Nie powoduje skojarzenia polecenia z MenuItem. Aplikacja musi obsługiwać dane wejściowe użytkownika, aby wykonać akcję.

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

Polecenie

W poniższym przykładzie pokazano, jak używać właściwości Command do skojarzenia poleceń Open i Save z kontrolkami MenuItem. Właściwość polecenia nie tylko kojarzy polecenie z MenuItem, ale także dostarcza tekst gestu wejściowego do użycia jako skrót.

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

Klasa MenuItem ma również właściwość CommandTarget, która określa element, w którym występuje polecenie. Jeśli CommandTarget nie jest ustawiona, element z fokusem klawiatury odbiera polecenie. Aby uzyskać więcej informacji na temat poleceń, zobacz Commanding Overview.

Styl kontrolek pozwala znacząco zmienić wygląd i zachowanie kontrolek Menu bez konieczności pisania kontrolki niestandardowej. Oprócz ustawiania właściwości wizualizacji można również zastosować Style do poszczególnych części kontrolki, zmienić zachowanie części kontrolki za pomocą właściwości lub dodać dodatkowe części lub zmienić układ kontrolki. W poniższych przykładach pokazano kilka sposobów dodawania Style do kontrolki Menu.

Pierwszy przykład kodu definiuje Style o nazwie Simple, która pokazuje, jak używać bieżących ustawień systemowych w twoim stylu. Kod przypisuje kolor MenuHighlightBrush jako kolor tła menu i MenuTextBrush jako kolor pierwszego planu menu. Zwróć uwagę, że używasz kluczy zasobów do przypisywania pędzli.

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

W poniższym przykładzie użyto Trigger elementów, które umożliwiają zmianę wyglądu MenuItem w odpowiedzi na zdarzenia występujące na Menu. Po przeniesieniu myszy na Menuzmienia się kolor pierwszego planu i właściwości czcionki elementów 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>

Zobacz też

  • Przykład galerii kontrolek platformy WPF