Partilhar via


Como: Hook Up a Command to a Control with Command Support

O exemplo a seguir mostra como atrelar um RoutedCommand a um Control que tem suporte embutido para o comando. Para um exemplo completo que atrela comandos a múltiplas fontes, veja o exemplo Criar um exemplo de RoutedCommand Personalizar.

Exemplo

Windows Presentation Foundation (WPF) fornece uma biblioteca de comandos comuns que programadores de aplicação encontram regularmente. As classes que compõem a biblioteca de comando são: ApplicationCommands, ComponentCommands, , NavigationCommands, MediaCommands, e EditingCommands.

Os objetos estáticos RoutedCommand que compõem essas classes não fornecem lógica de comando. A lógica do comando está associada com o comando com um CommandBinding. Alguns controles têm CommandBindings embutidos para alguns comandos. Esse mecanismo permite que a semântica de um comando permaneça a mesma, enquanto a implementação real pode mudar. Um TextBox, por exemplo, manipula o comando Paste de forma diferente que um controle projetado para apoiar imagens, mas a ideia básica do que significa colar algo continua a mesma. A lógica de comando não pode ser fornecida pelo comando, mas precisa ser fornecida pelo controle ou pela aplicação.

Muitos controles em WPF não têm suporte para alguns comandos na biblioteca de comandos. TextBox, por exemplo, suporte muitos dos comandos de edição de aplicação tais como Paste, Copy, Cut, Redo e Undo. O desenvolvedor da aplicação não tem que fazer nada especial para fazer esses comandos funcionarem com esses controles. Se o TextBox é o alvo do comando quando o comando é executado, manipulará o comando utilizando o CommandBinding que é embutido no controle.

O que segue mostra como utilizar MenuItem como a fonte de comando para o comando Paste, onde TextBox é o alvo do comando. Toda a lógica que define como o TextBox realiza a cola está embutida no controle TextBox.

Um MenuItem é criado e sua propriedade Command é definida como o comando Paste. O CommandTarget não é explicitamente definido para o objeto TextBox. Quando CommandTarget não está definido, o alvo para o comando e o elemento que tem o foco do teclado. Se o elemento que tem o foco do teclado não suporta o comando Paste ou não pode executar o comando de cola (a área de transferência está vazia, por exemplo), então o MenuItem estará desabilitado.

<Window x:Class="SDKSamples.Window1"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://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);
}

Consulte também

Tarefas

Como: Enganchar um Comando em um Controle sem Suporte de Comando

Conceitos

Visão geral de Comando