Partager via


Comment faire pour connecter une commande à un contrôle avec support des commandes

L'exemple suivant montre comment connecter un RoutedCommand à un élément Control qui dispose d'une prise en charge intégrée pour la commande. Pour obtenir un exemple complet qui connecte des commandes à plusieurs sources, consultez l’exemple Créer un exemple RoutedCommand personnalisé .

Exemple :

Windows Presentation Foundation (WPF) fournit une bibliothèque de commandes courantes que les programmeurs d’applications rencontrent régulièrement. Les classes qui composent la bibliothèque de commandes sont : ApplicationCommands, , ComponentCommandsNavigationCommands, MediaCommands, et EditingCommands.

Les objets statiques RoutedCommand qui composent ces classes ne fournissent pas de logique de commande. La logique de la commande est associée à la commande avec un CommandBinding. Certains contrôles ont été intégrés à CommandBindings pour certaines commandes. Ce mécanisme permet à la sémantique d’une commande de rester la même, tandis que l’implémentation réelle peut changer. Un TextBox, par exemple, gère la commande Paste différemment d’une commande conçue pour prendre en charge les images, mais l’idée de base de ce que signifie coller quelque chose reste la même. La logique de commande ne peut pas être fournie par la commande, mais doit plutôt être fournie par le contrôle ou l’application.

De nombreux contrôles dans WPF prennent en charge certaines des commandes de la bibliothèque de commandes. TextBox, par exemple, prend en charge la plupart des commandes de modification d’application telles que Paste, , CopyCut, , Redo, et Undo. Le développeur d’applications n’a pas besoin de faire quelque chose de spécial pour obtenir ces commandes pour travailler avec ces contrôles. TextBox S’il s’agit de la cible de commande lorsque la commande est exécutée, elle gère la commande à l’aide de l’élément CommandBinding intégré au contrôle.

L’exemple suivant montre comment utiliser une MenuItem source de commande pour la Paste commande, où est TextBox la cible de la commande. Toute la logique qui définit la façon dont le collage de TextBox est intégré dans le composant TextBox.

A MenuItem est créé et sa Command propriété est définie sur la Paste commande. L’objet CommandTarget n’est pas explicitement défini à l’objet TextBox. Lorsque le CommandTarget paramètre n’est pas défini, la cible de la commande est l’élément qui a le focus clavier. Si l’élément qui a le focus clavier ne prend pas en charge la commande Paste ou ne peut pas actuellement exécuter la commande coller (par exemple, si le Presse-papiers est vide), alors MenuItem sera grisé.

<Window x:Class="SDKSamples.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MenuItemCommandTask"
    >
    <DockPanel>
      <Menu DockPanel.Dock="Top">
        <MenuItem Command="ApplicationCommands.Paste" Width="75" />
      </Menu>
      <TextBox BorderBrush="Black" BorderThickness="2" Margin="25"
               TextWrapping="Wrap">
        The MenuItem will not be enabled until
        this TextBox gets keyboard focus  
      </TextBox>
    </DockPanel>
</Window>
// Window1 constructor
public Window1()
{
    InitializeComponent();

    // Instantiating UIElements.
    DockPanel mainPanel = new DockPanel();
    Menu mainMenu = new Menu();
    MenuItem pasteMenuItem = new MenuItem();
    TextBox mainTextBox = new TextBox();

    // Associating the MenuItem with the Paste command.
    pasteMenuItem.Command = ApplicationCommands.Paste;

    // Setting properties on the TextBox.
    mainTextBox.Text =
        "The MenuItem will not be enabled until this TextBox receives keyboard focus.";
    mainTextBox.Margin = new Thickness(25);
    mainTextBox.BorderBrush = Brushes.Black;
    mainTextBox.BorderThickness = new Thickness(2);
    mainTextBox.TextWrapping = TextWrapping.Wrap;

    // Attaching UIElements to the Window.
    this.AddChild(mainPanel);
    mainMenu.Items.Add(pasteMenuItem);
    mainPanel.Children.Add(mainMenu);
    mainPanel.Children.Add(mainTextBox);

    // Defining DockPanel layout.
    DockPanel.SetDock(mainMenu, Dock.Top);
    DockPanel.SetDock(mainTextBox, Dock.Bottom);
}
' Window1 constructor
Public Sub New()
    InitializeComponent()

    ' Instantiating UIElements.
    Dim mainPanel As New DockPanel()
    Dim mainMenu As New Menu()
    Dim pasteMenuItem As New MenuItem()
    Dim mainTextBox As New TextBox()

    ' Associating the MenuItem with the Paste command.
    pasteMenuItem.Command = ApplicationCommands.Paste

    ' Setting properties on the TextBox.
    mainTextBox.Text = "The MenuItem will not be enabled until this TextBox receives keyboard focus."
    mainTextBox.Margin = New Thickness(25)
    mainTextBox.BorderBrush = Brushes.Black
    mainTextBox.BorderThickness = New Thickness(2)
    mainTextBox.TextWrapping = TextWrapping.Wrap

    ' Attaching UIElements to the Window.
    Me.AddChild(mainPanel)
    mainMenu.Items.Add(pasteMenuItem)
    mainPanel.Children.Add(mainMenu)
    mainPanel.Children.Add(mainTextBox)

    ' Defining DockPanel layout.
    DockPanel.SetDock(mainMenu, Dock.Top)
    DockPanel.SetDock(mainTextBox, Dock.Bottom)
End Sub

Voir aussi