Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az alábbi példa bemutatja, hogyan csatlakoztathat RoutedCommand-t egy olyan Control-hez, amely nem rendelkezik beépített támogatással a parancshoz. A parancsokat több forráshoz csatlakoztató teljes mintaért tekintse meg a Custom RoutedCommand Minta létrehozása mintát.
példa
A Windows Presentation Foundation (WPF) olyan gyakori parancsok tárát biztosítja, amelyekkel az alkalmazásprogramozók rendszeresen találkoznak. A parancstárat alkotó osztályok a következők: ApplicationCommands, ComponentCommands, NavigationCommands, MediaCommandsés EditingCommands.
Az osztályokat alkotó statikus RoutedCommand objektumok nem biztosítanak parancslogikát. A parancs logikája egy CommandBinding-ás kóddal van társítva a parancshoz. A WPF számos vezérlője támogatja a parancstár egyes parancsait. TextBoxpéldául számos alkalmazás-szerkesztési parancsot támogat, például Paste, Copy, Cut, Redoés Undo. Az alkalmazásfejlesztőnek nem kell semmi különlegeset tennie ahhoz, hogy ezek a parancsok működjenek ezekkel a vezérlőkkel. Ha a parancs végrehajtásakor a TextBox a parancs célja, akkor a parancsot a vezérlőbe beépített CommandBinding fogja kezelni.
Az alábbiakban bemutatjuk, hogyan használható egy Button parancsforrásként a Open parancshoz. Létrejön egy CommandBinding, amely a megadott CanExecuteRoutedEventHandler-et és a CanExecuteRoutedEventHandler-t társítja a RoutedCommand-mal.
Először létrejön a parancsforrás. A Button-t használják parancsforrásként.
<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)
Ezután létrejön a ExecutedRoutedEventHandler és a CanExecuteRoutedEventHandler. A ExecutedRoutedEventHandler egyszerűen megnyit egy MessageBox, amely a parancs végrehajtását jelzi. A CanExecuteRoutedEventHandler a CanExecute tulajdonságot trueértékre állítja. A parancsvégrehajtó kezelő általában alaposabb ellenőrzéseket végezne annak érdekében, hogy a parancs végrehajtható-e az adott parancscélon.
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
Végül létrejön egy CommandBinding az alkalmazás egy gyökerén (Window), amely az irányított eseménykezelőket a Open parancshoz társítja.
<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)
Lásd még
.NET Desktop feedback