Bagikan melalui


Cara Menghubungkan Perintah ke Kontrol tanpa Dukungan Perintah

Contoh berikut menunjukkan cara menghubungkan RoutedCommand ke Control yang tidak memiliki dukungan bawaan untuk perintah tersebut. Untuk sampel lengkap yang menghubungkan perintah ke beberapa sumber, lihat sampel Membuat 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, NavigationCommands, MediaCommands, dan EditingCommands.

Objek RoutedCommand statis yang membentuk kelas-kelas ini tidak menyediakan logika perintah. Logika untuk perintah terkait dengan perintah CommandBinding. Banyak kontrol di WPF memiliki dukungan bawaan untuk beberapa perintah di perpustakaan perintah. TextBox, misalnya, mendukung banyak perintah edit aplikasi seperti Paste, Copy, Cut, Redo, dan Undo. Pengembang aplikasi tidak perlu melakukan sesuatu yang istimewa untuk mendapatkan perintah ini untuk bekerja dengan kontrol ini. Jika TextBox adalah target perintah saat dieksekusi, perintah akan ditangani menggunakan CommandBinding yang terintegrasi dalam kontrol.

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

Pertama, sumber perintah dibuat. Button digunakan 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. ExecutedRoutedEventHandler hanya membuka MessageBox untuk menandakan bahwa perintah dijalankan. CanExecuteRoutedEventHandler mengatur properti CanExecute ke true. 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 Window akar aplikasi yang mengaitkan penanganan peristiwa yang dirutekan ke perintah Open.

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

Lihat juga