Postupy: Připojení příkazu k ovládacímu prvku 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 Create a Custom RoutedCommand Sample.
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, neposkytují logiku příkazů. Logika příkazu je spojena s příkazem 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 jsou Paste, 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. Pokud je TextBox cílem příkazu při spuštění příkazu, zpracuje příkaz pomocí CommandBinding, který je součástí ovládacího prvku.
Následující příklad ukazuje, jak použít Button jako zdroj příkazů pro příkaz Open. Vytvoří se CommandBinding, který spojuje zadané CanExecuteRoutedEventHandler a CanExecuteRoutedEventHandler s RoutedCommand.
Nejprve se vytvoří zdroj příkazu. Jako zdroj příkazů se používá Button.
<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 vytvoří ExecutedRoutedEventHandler a CanExecuteRoutedEventHandler.
ExecutedRoutedEventHandler jednoduše otevře MessageBox k označení, že se příkaz spustil.
CanExecuteRoutedEventHandler nastaví vlastnost CanExecute na true
. Za normálních okolností by obslužná rutina prováděla robustnější kontroly, aby zjistila, jestli by se příkaz mohl provést na 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ří CommandBinding v kořenovém Window aplikace, která přidruží obslužné rutiny směrovaných událostí k příkazu 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)
Viz také
- Přehled velení
- Připojit příkaz k ovládacímu prvku s podporou příkazů
.NET Desktop feedback