Gewusst wie: Hinzufügen eines Befehls zu einem MenuItem

Aktualisiert: November 2007

Im folgenden Beispiel wird veranschaulicht, wie ein MenuItem als Befehlsquelle für den Paste-Befehl eingerichtet wird. Weitere Informationen über Befehle finden Sie unter Befehlsübersicht.

Beispiel

Ein MenuItem, z. B. Button und Hyperlink, implementiert ICommandSource. Zwei von ICommandSource zur Verfügung gestellte Eigenschaften sind Command und CommandTarget. Command ist der Befehl, der aufgerufen wird, und CommandTarget ist das Element, an dem das Ereignisrouting beim Aufruf des Befehls beginnt. Wenn CommandTarget nicht definiert ist, wird das Element als Ziel festgelegt, das über den Tastaturfokus verfügt.

Die Klasse, die ICommandSource implementiert, definiert, was dies für den aufgerufenen Befehl bedeutet. MenuItem und Button definieren das Click-Ereignis als Mittel zum Aufrufen des Befehls. Wenn der Befehl nicht für ein bestimmtes CommandTarget ausgeführt werden kann, wird MenuItem deaktiviert. Kann der Befehl für das CommandTarget ausgeführt werden, wird MenuItem aktiviert.

In diesem Beispiel wird ein MenuItem in dem Window der Anwendung erstellt. Die Command-Eigenschaft wird auf den Paste-Befehl festgelegt. CommandTarget ist in MenuItem nicht definiert. Aus diesem Grund wird als Ziel für den Befehl das Element verwendet, auf dem sich der Tastaturfokus befindet.

Da die TextBox-Klasse Logik für den Paste-Befehl angibt, ist eine CommandBinding nicht erforderlich. Wenn das Steuerelement, das den Befehl verarbeitet, keine Logik für die Befehlsausführung bereitstellt, ist eine CommandBinding erforderlich, um ExecutedRoutedEventHandler und CanExecuteRoutedEventHandler an RoutedCommand zu binden.

<Window x:Class="SDKSamples.Window1"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    Title="MenuItemCommandTask"
    >
    <DockPanel>
      <Menu DockPanel.Dock="Top">
        <MenuItem Command="ApplicationCommands.Paste" Width="75" />
      </Menu>
      <TextBox BorderBrush="Black" BorderThickness="2" Margin="25"
               TextWrapping="Wrap">
        The MenuItem will not be enabled until
        this TextBox gets keyboard focus  
      </TextBox>
    </DockPanel>
</Window>

Siehe auch

Konzepte

Befehlsübersicht

Übersicht über die Eingabe

Referenz

ApplicationCommands