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 használható a parancsolás a Windows Presentation Foundationben (WPF). A példa bemutatja, hogyan társítsunk egy RoutedCommand-t egy Button-hez, hogyan hozzunk létre egy CommandBinding-t, és hogyan hozzuk létre a RoutedCommand-at implementáló eseménykezelőket. További információ a parancsolásról: Parancsok áttekintése.
példa
A kód első szakasza létrehozza a felhasználói felületet (UI), amely egy Button-t és egy StackPanel-et tartalmaz, és létrehoz egy CommandBinding-t, amely a parancskezelőket a RoutedCommand-hez társítja.
A Command tulajdonsága a Button-nek a Close parancshoz kapcsolódik.
A CommandBinding hozzáadódik a gyökér CommandBindingCollectionWindow-jéhez. A Executed és CanExecute eseménykezelők ehhez a kötéshez vannak csatolva, és a Close parancshoz vannak társítva.
A CommandBinding nélkül nincs parancslogika, csak a parancs meghívására szolgáló mechanizmus. Amikor a Button-ra kattintanak, a PreviewExecutedRoutedEvent megjelenik a célobjektumon, majd a ExecutedRoutedEvent. Ezek az események áthaladnak az elemfán, és CommandBinding-t keresnek ehhez a konkrét parancshoz. Érdemes megjegyezni, hogy mivel RoutedEvent alagutazik és buborékol az elemfán, ügyelni kell, hogy hova kerül a CommandBinding. Ha a CommandBinding a parancscél vagy egy másik csomópont testvérén van, amely nem a RoutedEventútvonalán található, a CommandBinding nem lesz elérhető.
<Window x:Class="WCSamples.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://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);
' Create ui elements.
Dim CloseCmdStackPanel As New StackPanel()
Dim CloseCmdButton As New Button()
CloseCmdStackPanel.Children.Add(CloseCmdButton)
' Set Button's properties.
CloseCmdButton.Content = "Close File"
CloseCmdButton.Command = ApplicationCommands.Close
' Create the CommandBinding.
Dim CloseCommandBinding As New CommandBinding(ApplicationCommands.Close, AddressOf CloseCommandHandler, AddressOf CanExecuteHandler)
' Add the CommandBinding to the root Window.
RootWindow.CommandBindings.Add(CloseCommandBinding)
A kód következő szakasza implementálja a Executed és CanExecute eseménykezelőket.
A Executed kezelő metódust hív meg a megnyitott fájl bezárásához. A CanExecute kezelő metódust hív meg annak megállapításához, hogy egy fájl meg van-e nyitva. Ha egy fájl meg van nyitva, CanExecute értéke truelesz; ellenkező esetben CanExecute értéke lesz.
// 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;
}
}
' Executed event handler.
Private Sub CloseCommandHandler(ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs)
' Calls a method to close the file and release resources.
CloseFile()
End Sub
' CanExecute event handler.
Private Sub CanExecuteHandler(ByVal sender As Object, ByVal e As CanExecuteRoutedEventArgs)
' Call a method to determine if there is a file open.
' If there is a file open, then set CanExecute to true.
If IsFileOpened() Then
e.CanExecute = True
' if there is not a file open, then set CanExecute to false.
Else
e.CanExecute = False
End If
End Sub
Lásd még
.NET Desktop feedback