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é
.NET Desktop feedback
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro