Nasıl yapılır: Komut Desteği Olmadan Denetime Komut Bağlama
Aşağıdaki örnekte komutu için yerleşik desteği olmayan bir'e RoutedCommandControl nasıl bağlanıldığı gösterilmektedir. Komutları birden çok kaynağa bağlayan eksiksiz bir örnek için Bkz . Özel Yönlendirilmiş Komut Örneği Oluşturma.
Örnek
Windows Presentation Foundation (WPF), uygulama programcıların düzenli olarak karşılaştığı yaygın komutlardan oluşan bir kitaplık sağlar. Komut kitaplığını oluşturan sınıflar şunlardır: ApplicationCommands, ComponentCommands, NavigationCommands, MediaCommandsve EditingCommands.
Bu sınıfları oluşturan statik RoutedCommand nesneler komut mantığı sağlamaz. komutunun mantığı komutuyla CommandBindingilişkilendirilir. WPF'deki birçok denetim, komut kitaplığındaki bazı komutlar için yerleşik destek sağlar. TextBox, örneğin, , , Copy, CutRedove Undogibi Pasteuygulama düzenleme komutlarının çoğunu destekler. Uygulama geliştiricisinin bu denetimlerle çalışmak için bu komutları almak için özel bir şey yapması gerekmez. TextBox komutu yürütülürken komut hedefi ise, denetimin yerleşik öğesini kullanarak CommandBinding komutu işler.
Aşağıda komutun komut kaynağı olarak nasıl Button kullanılacağı gösterilmektedir Open . CommandBinding belirtilen CanExecuteRoutedEventHandler ve CanExecuteRoutedEventHandler ile RoutedCommandilişkilendiren bir oluşturulur.
İlk olarak, komut kaynağı oluşturulur. A Button , komut kaynağı olarak kullanılır.
<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)
ExecutedRoutedEventHandler Ardından ve CanExecuteRoutedEventHandler oluşturulur. basitçe ExecutedRoutedEventHandler komutun yürütüldüğünü belirten bir MessageBox açar. CanExecuteRoutedEventHandler özelliğini olarak CanExecutetrue
ayarlar. Normalde, can execute işleyicisi komutun geçerli komut hedefinde yürütülip yürütülemediğini görmek için daha güçlü denetimler gerçekleştirir.
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
Son olarak, yönlendirilen olay işleyicilerini komutuyla ilişkilendiren uygulamanın kökünde WindowOpen bir CommandBinding oluşturulur.
<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)
Ayrıca bkz.
.NET Desktop feedback
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin