Aracılığıyla paylaş


Nasıl yapılır: Komut Desteği Olmayan Bir Denetime Komut Bağlama

Aşağıdaki örnek, bir RoutedCommand'ı komut için yerleşik desteği olmayan bir Control'e nasıl bağlayacağınızı göstermektedir. Birden çok kaynağa komutları bağlayan eksiksiz bir örnek için Özel Yönlendirilmiş Komut Örneği Oluşturma örneğine bakın.

Ö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 nesneleri komut mantığı sağlamaz. Komutun mantığı, bir CommandBindingile komutla ilişkilendirilmiştir. WPF'deki birçok denetim, komut kitaplığındaki bazı komutlar için yerleşik destek sağlar. örneğin TextBox, Paste, Copy, Cut, Redove Undogibi uygulama 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. komut yürütülürken TextBox komut hedefiyse, denetimin içinde yerleşik olarak bulunan CommandBinding kullanarak komutu işler.

Aşağıda, Button komutu için komut kaynağı olarak bir Open nasıl kullanılacağı gösterilmektedir. Belirtilen CommandBinding ve CanExecuteRoutedEventHandler'yi CanExecuteRoutedEventHandlerile ilişkilendirecek bir RoutedCommand oluşturulur.

İlk olarak, komut kaynağı oluşturulur. Komut kaynağı olarak bir Button 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)

Ardından, ExecutedRoutedEventHandler ve CanExecuteRoutedEventHandler oluşturulur. ExecutedRoutedEventHandler, komutun yürütüldüğünü belirten bir MessageBox'i basitçe açar. CanExecuteRoutedEventHandler, CanExecute özelliğini trueolarak 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 CommandBinding komutuyla ilişkilendiren uygulamanın kök Window üzerinde bir Open 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 bakınız