Como: Conectar um comando a um controle com suporte a comandos
O exemplo a seguir mostra como conectar um RoutedCommand a um Control que incorporou suporte para o comando. Para obter um exemplo completo que conecta comandos a várias fontes, consulte o exemplo de "Criar um RoutedCommand Personalizado" .
Exemplo
Windows Presentation Foundation (WPF) fornece uma biblioteca de comandos comuns que os programadores de aplicativos encontram regularmente. As classes que compõem a biblioteca de comandos são: ApplicationCommands, ComponentCommands, NavigationCommands, MediaCommandse EditingCommands.
Os objetos RoutedCommand estáticos que compõem essas classes não fornecem lógica de comando. A lógica do comando está associada ao comando com um CommandBinding. Alguns controlos têm CommandBindings incorporados 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, lida com o comando Paste de forma diferente de um controle projetado para suportar imagens, mas a ideia básica do que significa colar algo permanece a mesma. A lógica de comando não pode ser fornecida pelo comando, mas deve ser fornecida pelo controle ou pelo aplicativo.
Muitos controles no WPF têm suporte interno para alguns dos comandos na biblioteca de comandos. TextBox, por exemplo, suporta muitos dos comandos de edição do aplicativo, como Paste, Copy, Cut, Redoe Undo. O desenvolvedor do aplicativo não precisa fazer nada de especial para que esses comandos funcionem com esses controles. Se o TextBox for o destino do comando quando o comando for executado, ele manipulará o comando usando o CommandBinding incorporado ao controle.
A seguir mostra como usar um MenuItem como a fonte de comando para o comando Paste, onde um TextBox é o destino do comando. Toda a lógica que define como o TextBox executa a colagem está incorporada no controlo TextBox.
Um MenuItem é criado e a sua propriedade Command é definida para o comando Paste. O CommandTarget não está explicitamente definido para o objeto TextBox. Quando o CommandTarget não está definido, o destino do comando é o elemento que tem o foco do teclado. Se o elemento que tem o foco do teclado não suportar o comando Paste ou não puder executar atualmente o comando colar (a área de transferência está vazia, por exemplo), o MenuItem ficará acinzentado.
<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
Ver também
.NET Desktop feedback