Condividi tramite


Procedura: attivare un comando

Aggiornamento: novembre 2007

Nell'esempio seguente viene illustrato l'utilizzo dei comandi in Windows Presentation Foundation (WPF). Nell'esempio viene mostrato come associare un oggetto RoutedCommand a uno Button, creare un oggetto CommandBinding e creare i gestori eventi che implementano RoutedCommand. Per ulteriori informazioni sull'esecuzione di comandi, vedere Cenni preliminari sull'esecuzione di comandi.

Esempio

La prima sezione di codice crea l'interfaccia utente, costituita da un oggetto Button e da un oggetto StackPanel; inoltre crea un oggetto CommandBinding che associa i gestori dei comandi all'oggetto RoutedCommand.

La proprietà Command dell'oggetto Button è associata al comando Close.

L'oggetto CommandBinding viene aggiunto all'oggetto CommandBindingCollection dell'oggetto Window radice. I gestori eventi Executed e CanExecute sono associati a questa associazione e al comando Close.

Senza CommandBinding non è possibile determinare una logica di comando, ma solo un meccanismo per richiamare il comando. Facendo clic su Button viene generato l'evento PreviewExecuted RoutedEvent nella destinazione comando, seguito dall'evento Executed RoutedEvent. Questi eventi attraversano la struttura ad albero dell'elemento alla ricerca di un oggetto CommandBinding per quel determinato comando. È necessario prestare attenzione alla posizione in cui viene inserito CommandBinding, dal momento che RoutedEvent esegue il tunneling e il bubbling attraverso la struttura ad albero dell'elemento. Se l'oggetto CommandBinding si trova in un elemento di pari livello della destinazione comando o in un altro nodo che non appartiene alla route dell'oggetto RoutedEvent, non sarà possibile accedere all'oggetto CommandBinding.

<Window x:Class="WCSamples.Window1"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    Title="CloseCommand"
    Name="RootWindow"
    >
  <Window.CommandBindings>
    <CommandBinding Command="ApplicationCommands.Close"
                    Executed="CloseCommandHandler"
                    CanExecute="CanExecuteHandler"
                    />
  </Window.CommandBindings>
  <StackPanel Name="MainStackPanel">
    <Button Command="ApplicationCommands.Close" 
            Content="Close File" />
  </StackPanel>
</Window>
// Create ui elements.
StackPanel CloseCmdStackPanel = new StackPanel();
Button CloseCmdButton = new Button();
CloseCmdStackPanel.Children.Add(CloseCmdButton);

// Set Button's properties.
CloseCmdButton.Content = "Close File";
CloseCmdButton.Command = ApplicationCommands.Close;

// Create the CommandBinding.
CommandBinding CloseCommandBinding = new CommandBinding(
    ApplicationCommands.Close, CloseCommandHandler, CanExecuteHandler);

// Add the CommandBinding to the root Window.
RootWindow.CommandBindings.Add(CloseCommandBinding);

La successiva sezione di codice implementa i gestori eventi Executed e CanExecute.

Il gestore Executed chiama un metodo per chiudere il file aperto. Il gestore CanExecute chiama un metodo per determinare se un file è aperto. Se un file risulta aperto, la proprietà CanExecute è impostata su true; in caso contrario, sarà impostata su false.

// Executed event handler.
private void CloseCommandHandler(object sender, ExecutedRoutedEventArgs e)
{
    // Calls a method to close the file and release resources.
    CloseFile();
}

// CanExecute event handler.
private void CanExecuteHandler(object sender, CanExecuteRoutedEventArgs e)
{
    // Call a method to determine if there is a file open.
    // If there is a file open, then set CanExecute to true.
    if (IsFileOpened())
    {
        e.CanExecute = true;
    }
    // if there is not a file open, then set CanExecute to false.
    else
    {
        e.CanExecute = false;
    }
}

Vedere anche

Concetti

Cenni preliminari sull'esecuzione di comandi