Condividi tramite


Procedura: creare un oggetto RoutedCommand

In questo esempio viene illustrato come creare un oggetto personalizzato RoutedCommand e come implementare il comando personalizzato creando un ExecutedRoutedEventHandler oggetto e un CanExecuteRoutedEventHandler oggetto e associandoli a un oggetto CommandBinding. Per altre informazioni sui comandi, vedere Panoramica dei comandi.

Esempio

Il primo passaggio per la creazione di un oggetto RoutedCommand consiste nel definire il comando e crearne un'istanza.

public static RoutedCommand CustomRoutedCommand = new RoutedCommand();
Public Shared CustomRoutedCommand As New RoutedCommand()

Per usare il comando in un'applicazione, i gestori eventi che definiscono le operazioni che il comando deve essere creato

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

Viene quindi creato un oggetto CommandBinding che associa il comando ai gestori eventi. L'oggetto CommandBinding viene creato in un oggetto specifico. Questo oggetto definisce l'ambito dell'oggetto CommandBinding nell'albero degli elementi

<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)

Il passaggio finale richiama il comando . Un modo per richiamare un comando consiste nell'associarlo a un ICommandSourceoggetto , ad esempio .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

Quando si fa clic su Button, viene chiamato il Execute metodo sull'oggetto personalizzato RoutedCommand . Genera RoutedCommand gli PreviewExecuted eventi indirizzati e Executed . Questi eventi attraversano l'albero degli elementi cercando un oggetto CommandBinding per questo particolare comando. Se viene trovato un CommandBinding oggetto , viene chiamato l'oggetto ExecutedRoutedEventHandler associato CommandBinding a .

Vedi anche