Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I följande exempel visas hur du ansluter en RoutedCommand till en Control som inte har inbyggt stöd för kommandot. Ett fullständigt exempel som kopplar kommandon till flera källor finns i exemplet Skapa ett anpassat RoutedCommand-exempel.
Exempel
Windows Presentation Foundation (WPF) tillhandahåller ett bibliotek med vanliga kommandon som programprogram programmerare möter regelbundet. Klasserna som utgör kommandobiblioteket är: ApplicationCommands, ComponentCommands, NavigationCommands, MediaCommandsoch EditingCommands.
De statiska RoutedCommand objekt som utgör dessa klasser tillhandahåller inte kommandologik. Logiken för kommandot är kopplad till kommandot med en CommandBinding. Många kontroller i WPF har inbyggt stöd för några av kommandona i kommandobiblioteket. TextBoxstöder till exempel många av programredigeringskommandona, till exempel Paste, Copy, Cut, Redooch Undo. Programutvecklaren behöver inte göra något speciellt för att få dessa kommandon att fungera med dessa kontroller. Om TextBox är kommandomålet när kommandot körs hanterar det kommandot med hjälp av den CommandBinding som är inbyggd i kontrollen.
Följande visar hur du använder en Button som kommandokälla för kommandot Open. En CommandBinding skapas som associerar den angivna CanExecuteRoutedEventHandler och CanExecuteRoutedEventHandler med RoutedCommand.
Först skapas kommandokällan. En Button används som kommandokälla.
<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)
Därefter skapas ExecutedRoutedEventHandler och CanExecuteRoutedEventHandler.
ExecutedRoutedEventHandler öppnar helt enkelt en MessageBox för att ange att kommandot kördes.
CanExecuteRoutedEventHandler ställer in egenskapen CanExecute till true. Normalt utför can execute-hanteraren mer robusta kontroller för att se om kommandot kan köras på det aktuella kommandomålet.
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
Slutligen skapas en CommandBinding på roten Window av applikationen som kopplar de dirigerade händelsehanterarna till kommandot Open.
<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)
Se även
.NET Desktop feedback