Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das folgende Beispiel zeigt, wie Sie eine RoutedCommand mit einer Control verbinden, die keine integrierte Unterstützung für den Befehl bietet. Ein vollständiges Beispiel, das Befehle mit mehreren Quellen verknüpft, finden Sie im Beispiel unter Erstellen eines benutzerdefinierten „RoutedCommand“-Beispiels.
Beispiel
Windows Presentation Foundation (WPF) stellt eine Bibliothek allgemeiner Befehle bereit, auf die Anwendungsprogrammierer regelmäßig stoßen. Die Klassen, aus denen die Befehlsbibliothek besteht, sind: ApplicationCommands, ComponentCommands, NavigationCommands, MediaCommandsund EditingCommands.
Die statischen RoutedCommand Objekte, aus denen diese Klassen bestehen, geben keine Befehlslogik an. Die Logik für den Befehl wird dem Befehl mit CommandBinding zugeordnet. Viele Steuerelemente in WPF verfügen über integrierte Unterstützung für einige der Befehle in der Befehlsbibliothek. TextBoxunterstützt beispielsweise viele der Anwendungsbearbeitungsbefehle wie Paste, Copy, Cut, Redound Undo. Der Anwendungsentwickler muss nichts Besonderes tun, um diese Befehle für die Arbeit mit diesen Steuerelementen zu erhalten. Wenn das TextBox-Objekt bei Ausführung des Befehls das Ziel ist, wird der Befehl mit dem CommandBinding-Objekt behandelt, das in das Steuerelement integriert ist.
Im Folgenden wird gezeigt, wie Sie eine Button als Befehlsquelle für den Open Befehl verwenden. Ein CommandBinding wird erstellt, das die angegebenen CanExecuteRoutedEventHandler und CanExecuteRoutedEventHandler mit dem RoutedCommand verbindet.
Zuerst wird die Befehlsquelle erstellt. A Button wird als Befehlsquelle verwendet.
<Button Command="ApplicationCommands.Open" Name="MyButton"
Height="50" Width="200">
Open (KeyBindings: Ctrl+R, Ctrl+0)
</Button>
// Button used to invoke the command
Button CommandButton = new Button();
CommandButton.Command = ApplicationCommands.Open;
CommandButton.Content = "Open (KeyBindings: Ctrl-R, Ctrl-0)";
MainStackPanel.Children.Add(CommandButton);
' Button used to invoke the command
Dim CommandButton As New Button()
CommandButton.Command = ApplicationCommands.Open
CommandButton.Content = "Open (KeyBindings: Ctrl-R, Ctrl-0)"
MainStackPanel.Children.Add(CommandButton)
Als Nächstes werden ExecutedRoutedEventHandler und CanExecuteRoutedEventHandler erstellt. Der ExecutedRoutedEventHandler öffnet einfach ein MessageBox, um zu kennzeichnen, dass der Befehl ausgeführt wurde.
CanExecuteRoutedEventHandler setzt die Eigenschaft CanExecute auf true. Normalerweise würde der Execute-Handler gründlichere Überprüfungen durchführen, um festzustellen, ob der Befehl auf dem aktuellen Befehlsziel ausgeführt werden kann.
void OpenCmdExecuted(object target, ExecutedRoutedEventArgs e)
{
String command, targetobj;
command = ((RoutedCommand)e.Command).Name;
targetobj = ((FrameworkElement)target).Name;
MessageBox.Show("The " + command + " command has been invoked on target object " + targetobj);
}
void OpenCmdCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}
Private Sub OpenCmdExecuted(ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs)
Dim command, targetobj As String
command = CType(e.Command, RoutedCommand).Name
targetobj = CType(sender, FrameworkElement).Name
MessageBox.Show("The " + command + " command has been invoked on target object " + targetobj)
End Sub
Private Sub OpenCmdCanExecute(ByVal sender As Object, ByVal e As CanExecuteRoutedEventArgs)
e.CanExecute = True
End Sub
Schließlich wird ein CommandBinding im Stammverzeichnis Window der Anwendung erstellt, das die Handler für Routingereignisse mit dem Open Befehl verbindet.
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.Open"
Executed="OpenCmdExecuted"
CanExecute="OpenCmdCanExecute"/>
</Window.CommandBindings>
// Creating CommandBinding and attaching an Executed and CanExecute handler
CommandBinding OpenCmdBinding = new CommandBinding(
ApplicationCommands.Open,
OpenCmdExecuted,
OpenCmdCanExecute);
this.CommandBindings.Add(OpenCmdBinding);
' Creating CommandBinding and attaching an Executed and CanExecute handler
Dim OpenCmdBinding As New CommandBinding(ApplicationCommands.Open, AddressOf OpenCmdExecuted, AddressOf OpenCmdCanExecute)
Me.CommandBindings.Add(OpenCmdBinding)
Siehe auch
.NET Desktop feedback