Sdílet prostřednictvím


Postupy: Propojení příkazu s ovládacím prvkem bez podpory příkazů

Následující příklad ukazuje, jak připojit RoutedCommand k, Control který nemá integrovanou podporu příkazu. Kompletní ukázku, která připojí příkazy k více zdrojům, najdete v ukázce Vytvoření vlastní ukázky RoutedCommand .

Příklad

Windows Presentation Foundation (WPF) poskytuje knihovnu běžných příkazů, se kterými se programátoři aplikací setkávají pravidelně. Třídy, které tvoří knihovnu příkazů, jsou: ApplicationCommands, ComponentCommands, NavigationCommands, MediaCommandsa EditingCommands.

Statické RoutedCommand objekty, které tvoří tyto třídy, nezadají logiku příkazu. Logika příkazu je přidružena k příkazu s parametrem CommandBinding. Mnoho ovládacích prvků ve WPF má integrovanou podporu některých příkazů v knihovně příkazů. TextBox, například podporuje mnoho příkazů pro úpravy aplikace, jako Pastejsou , Copy, Cut, Redoa Undo. Vývojář aplikací nemusí dělat nic zvláštního, aby tyto příkazy fungovaly s těmito ovládacími prvky. TextBox Pokud je cílem příkazu při spuštění příkazu, zpracuje příkaz pomocí CommandBinding integrovaného ovládacího prvku.

Následující příklad ukazuje, jak použít Button jako zdroj příkazů pro Open tento příkaz. A CommandBinding je vytvořen, který přidruží zadané CanExecuteRoutedEventHandler a s CanExecuteRoutedEventHandlerRoutedCommand.

Nejprve se vytvoří zdroj příkazu. A Button se používá jako zdroj příkazů.

<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ále se ExecutedRoutedEventHandler vytvoří a vytvoří se CanExecuteRoutedEventHandler . Jednoduše ExecutedRoutedEventHandler se otevře symbol MessageBox , který značí, že se příkaz spustil. CanExecute Nastaví CanExecuteRoutedEventHandler vlastnost na true. Za normálních okolností může obslužná rutina provádět robustnější kontroly, abyste zjistili, jestli by se příkaz mohl provést v aktuálním cíli příkazu.


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

Nakonec se vytvoří v kořenovém adresáři Window aplikace, CommandBinding která k příkazu přidruží obslužné Open rutiny směrovaných událostí.

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

Viz také