Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In het volgende voorbeeld ziet u hoe u een RoutedCommand koppelt aan een Control die geen ingebouwde ondersteuning voor de opdracht heeft. Zie het Voorbeeld voor het maken van een Aangepaste RoutedCommand voor een compleet voorbeeld dat commando's koppelt aan meerdere bronnen.
Voorbeeld
Windows Presentation Foundation (WPF) biedt een bibliotheek met algemene opdrachten die programmeurs van toepassingen regelmatig tegenkomen. De klassen die bestaan uit de opdrachtbibliotheek zijn: ApplicationCommands, ComponentCommands, NavigationCommands, MediaCommandsen EditingCommands.
De statische RoutedCommand objecten waaruit deze klassen bestaan, leveren geen opdrachtlogica op. De logica voor de opdracht is gekoppeld aan de opdracht met een CommandBinding. Veel besturingselementen in WPF hebben ingebouwde ondersteuning voor sommige van de opdrachten in de opdrachtbibliotheek. TextBoxondersteunt bijvoorbeeld veel opdrachten voor het bewerken van toepassingen, zoals Paste, Copy, Cut, Redoen Undo. De toepassingsontwikkelaar hoeft niets speciaals te doen om deze opdrachten te laten werken met deze besturingselementen. Als het TextBox het opdrachtdoel is wanneer de opdracht wordt uitgevoerd, wordt de opdracht afgehandeld met behulp van de CommandBinding die is ingebouwd in het besturingselement.
Hieronder ziet u hoe u een Button gebruikt als de opdrachtbron voor de Open opdracht. Er wordt een CommandBinding gemaakt die de opgegeven CanExecuteRoutedEventHandler en de CanExecuteRoutedEventHandler koppelt aan de RoutedCommand.
Eerst wordt de opdrachtbron gemaakt. Een Button wordt gebruikt als opdrachtbron.
<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)
Vervolgens worden de ExecutedRoutedEventHandler en de CanExecuteRoutedEventHandler gemaakt. De ExecutedRoutedEventHandler opent gewoon een MessageBox om aan te geven dat de opdracht is uitgevoerd. De CanExecuteRoutedEventHandler stelt de eigenschap CanExecute in op true. Normaal gesproken zou de can-execute-handler uitgebreidere controles uitvoeren om te bepalen of de opdracht op de huidige doellocatie kan worden uitgevoerd.
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
Ten slotte wordt er een CommandBinding aangemaakt op de root Window van de applicatie, die de gerouteerde gebeurtenishandlers koppelt aan het commando 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)
Zie ook
.NET Desktop feedback