Hoe een RoutedCommand maken
In dit voorbeeld ziet u hoe u een aangepaste RoutedCommand maakt en hoe u de aangepaste opdracht implementeert door een ExecutedRoutedEventHandler en een CanExecuteRoutedEventHandler te maken en deze toe te voegen aan een CommandBinding. Voor meer informatie over het uitvoeren van opdrachten, zie de Commanding Overview.
Voorbeeld
De eerste stap bij het maken van een RoutedCommand is het definiëren van de opdracht en het instantiëren ervan.
public static RoutedCommand CustomRoutedCommand = new RoutedCommand();
Public Shared CustomRoutedCommand As New RoutedCommand()
Als u de opdracht in een toepassing wilt gebruiken, moeten gebeurtenishandlers die definiëren wat de opdracht doet, worden gemaakt
private void ExecutedCustomCommand(object sender,
ExecutedRoutedEventArgs e)
{
MessageBox.Show("Custom Command Executed");
}
Private Sub ExecutedCustomCommand(ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs)
MessageBox.Show("Custom Command Executed")
End Sub
// CanExecuteRoutedEventHandler that only returns true if
// the source is a control.
private void CanExecuteCustomCommand(object sender,
CanExecuteRoutedEventArgs e)
{
Control target = e.Source as Control;
if(target != null)
{
e.CanExecute = true;
}
else
{
e.CanExecute = false;
}
}
' CanExecuteRoutedEventHandler that only returns true if
' the source is a control.
Private Sub CanExecuteCustomCommand(ByVal sender As Object, ByVal e As CanExecuteRoutedEventArgs)
Dim target As Control = TryCast(e.Source, Control)
If target IsNot Nothing Then
e.CanExecute = True
Else
e.CanExecute = False
End If
End Sub
Vervolgens wordt een CommandBinding gemaakt die de opdracht koppelt aan de gebeurtenis-handlers. De CommandBinding wordt gemaakt op een specifiek object. Dit object definieert het bereik van de CommandBinding in de elementstructuur
<Window x:Class="SDKSamples.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:custom="clr-namespace:SDKSamples"
Height="600" Width="800"
>
<Window.CommandBindings>
<CommandBinding Command="{x:Static custom:Window1.CustomRoutedCommand}"
Executed="ExecutedCustomCommand"
CanExecute="CanExecuteCustomCommand" />
</Window.CommandBindings>
CommandBinding customCommandBinding = new CommandBinding(
CustomRoutedCommand, ExecutedCustomCommand, CanExecuteCustomCommand);
// attach CommandBinding to root window
this.CommandBindings.Add(customCommandBinding);
Dim customCommandBinding As New CommandBinding(CustomRoutedCommand, AddressOf ExecutedCustomCommand, AddressOf CanExecuteCustomCommand)
' attach CommandBinding to root window
Me.CommandBindings.Add(customCommandBinding)
De laatste stap is het aanroepen van de opdracht. Een manier om een opdracht aan te roepen, is het koppelen aan een ICommandSource, zoals een Button.
<StackPanel>
<Button Command="{x:Static custom:Window1.CustomRoutedCommand}"
Content="CustomRoutedCommand"/>
</StackPanel>
// create the ui
StackPanel CustomCommandStackPanel = new StackPanel();
Button CustomCommandButton = new Button();
CustomCommandStackPanel.Children.Add(CustomCommandButton);
CustomCommandButton.Command = CustomRoutedCommand;
' create the ui
Dim CustomCommandStackPanel As New StackPanel()
Dim CustomCommandButton As New Button()
CustomCommandStackPanel.Children.Add(CustomCommandButton)
CustomCommandButton.Command = CustomRoutedCommand
Wanneer op de knop wordt geklikt, wordt de Execute-methode aangeroepen op het aangepaste object RoutedCommand. De RoutedCommand activeert de PreviewExecuted en Executed doorgegeven gebeurtenissen. Deze gebeurtenissen doorlopen de elementstructuur die zoekt naar een CommandBinding voor deze specifieke opdracht. Als er een CommandBinding wordt gevonden, wordt de ExecutedRoutedEventHandler gekoppeld aan CommandBinding aangeroepen.
Zie ook
.NET Desktop feedback