Bagikan melalui


Cara: Menghubungkan Perintah ke Kontrol tanpa Dukungan Perintah

Contoh berikut menunjukkan cara menghubungkan RoutedCommand ke yang Control tidak memiliki dukungan bawaan untuk perintah. Untuk sampel lengkap yang menghubungkan perintah ke beberapa sumber, lihat sampel Buat Sampel RoutedCommand Kustom.

Contoh

Windows Presentation Foundation (WPF) menyediakan pustaka perintah umum yang ditemui programmer aplikasi secara teratur. Kelas yang terdiri dari pustaka perintah adalah: ApplicationCommands, , ComponentCommands, NavigationCommandsMediaCommands, dan EditingCommands.

Objek statis RoutedCommand yang membentuk kelas-kelas ini tidak menyediakan logika perintah. Logika untuk perintah dikaitkan dengan perintah dengan CommandBinding. Banyak kontrol di WPF telah membangun dukungan untuk beberapa perintah di pustaka perintah. TextBox, misalnya, mendukung banyak perintah edit aplikasi seperti Paste, , CopyCut, Redo, dan Undo. Pengembang aplikasi tidak perlu melakukan sesuatu yang istimewa untuk mendapatkan perintah ini untuk bekerja dengan kontrol ini. TextBox Jika adalah target perintah ketika perintah dijalankan, perintah akan menangani perintah menggunakan CommandBinding yang dibangun ke dalam kontrol.

Berikut ini memperlihatkan cara menggunakan Button sebagai sumber perintah untuk Open perintah. CommandBinding dibuat yang mengaitkan yang ditentukan CanExecuteRoutedEventHandler dan CanExecuteRoutedEventHandler dengan RoutedCommand.

Pertama, sumber perintah dibuat. digunakan Button sebagai sumber perintah.

<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)

Selanjutnya, ExecutedRoutedEventHandler dan CanExecuteRoutedEventHandler dibuat. hanya ExecutedRoutedEventHandler membuka MessageBox untuk menandakan bahwa perintah dijalankan. Mengatur CanExecuteRoutedEventHandler properti ke CanExecutetrue. Biasanya, handler yang dapat dijalankan akan melakukan pemeriksaan yang lebih kuat untuk melihat apakah perintah dapat dijalankan pada target perintah saat ini.


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

Terakhir, CommandBinding dibuat pada akar Window aplikasi yang mengaitkan penanganan peristiwa yang dirutekan ke Open perintah .

<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)

Baca juga