Como enganchar um comando em um controle com suporte de comando
O exemplo a seguir mostra como conectar um RoutedCommand a um Control que tem o suporte interno para o comando. Para ver um exemplo completo que interliga comandos a várias fontes, consulte o exemplo Criar um exemplo de RoutedCommand personalizado.
Exemplo
O 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, MediaCommands e EditingCommands.
Os objetos RoutedCommand estáticos que compõem essas classes não fornecem a lógica de comando. A lógica para o comando está associada ao comando com uma CommandBinding. Alguns controles têm CommandBindings embutidos para alguns comandos. Esse mecanismo permite que a semântica de um comando permaneça a mesma, embora a implementação real possa mudar. Uma TextBox, por exemplo, manipula o comando Paste de maneira diferente de um controle criado para dar suporte a 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 sim deve ser fornecida pelo controle ou o aplicativo.
Muitos controles no WPF têm suporte interno para alguns dos comandos na biblioteca de comandos. TextBox, por exemplo, dá suporte a muitos dos comandos de edição de aplicativo, como Paste, Copy, Cut, Redo e Undo. O desenvolvedor do aplicativo não precisa fazer nada especial para fazer com que esses comandos funcionem com esses controles. Se a TextBox for o destino de comando quando o comando for executado, ela manipulará o comando usando a CommandBinding interna do controle.
O exemplo a seguir mostra como usar um MenuItem como a origem de comando para o comando Paste, em que uma TextBox é o destino de comando. Toda a lógica que define como a TextBox executa a colagem está inserido no controle TextBox.
Um MenuItem é criado e sua propriedade Command é definida como o comando Paste. O CommandTarget não está explicitamente definido como o objeto TextBox. Quando o não está definido, o destino do comando é o elemento que tem o CommandTarget foco do teclado. Se o elemento que tem o foco do teclado não dá suporte ao comando Paste ou não pode executar o comando Colar no momento (a área de transferência está vazia, por exemplo), o MenuItem fica esmaecido.
<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
Confira também
.NET Desktop feedback
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de