MSDN Library
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

Cómo: Enlazar un comando a un control con la compatibilidad de comandos

En el ejemplo siguiente se muestra cómo enlazar RoutedCommand a un objeto Control que tiene compatibilidad integrada para el comando. Para obtener un ejemplo completo que enlaza comandos a varios orígenes, vea el ejemplo Create a Custom RoutedCommand Sample.

Windows Presentation Foundation (WPF) proporciona una biblioteca de comandos comunes que los programadores de aplicaciones suelen utilizar. Las clases que componen la biblioteca de comandos son: ApplicationCommands, ComponentCommands, NavigationCommands, MediaCommands y EditingCommands.

Los objetos RoutedCommand estáticos que componen estas clases no proporcionan la lógica de los comandos. La lógica del comando se asocia al comando mediante CommandBinding. Algunos controles tienen enlaces CommandBinding integrados para algunos comandos. Este mecanismo permite que la semántica de un comando permanezca igual, mientras que la implementación real puede cambiar. Por ejemplo, un control TextBox administra el comando Paste de manera distinta que un control diseñado para admitir imágenes, pero el concepto básico del significado de pegar algo no cambia. El comando no puede proporcionar la lógica de comando, ésta debe proporcionarla el control o la aplicación.

Muchos controles de WPF sí tienen compatibilidad integrada con algunos de los comandos de la biblioteca de comandos. Por ejemplo, TextBox admite muchos de los comandos de edición de aplicación, tales como Paste, Copy, Cut, Redo y Undo. El programador de aplicaciones no tiene que hacer nada especial para que estos comandos funcionen con estos controles. Si el control TextBox es el destino del comando al ejecutar éste último, administrará el comando mediante el objeto CommandBinding integrado en el control.

A continuación se muestra cómo utilizar MenuItem como origen del comando Paste, donde TextBox es el destino del comando. Toda la lógica que define cómo TextBox realiza la operación de pegar está integrada en el control TextBox.

Se crea MenuItem y se establece su propiedad Command en el comando Paste. CommandTarget no se establece explícitamente en el objeto TextBox. Cuando CommandTarget no se establece, el destino del comando es elemento que tiene el foco del teclado. Si el elemento que tiene el foco del teclado no admite el comando Paste o en este momento no puede ejecutarlo (por ejemplo, si el portapapeles está vacío), entonces el control MenuItem estará deshabilitado.


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



// 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);
}


Adiciones de comunidad

Mostrar:
© 2016 Microsoft