XAML - manipulação de eventos
O conceito geral de eventos em XAML é semelhante a eventos em outras linguagens de programação populares, como .NET e C ++. No XAML, todos os controles expõem alguns eventos para que possam ser inscritos para fins específicos.
Sempre que um evento ocorre, o aplicativo será notificado e o programa pode reagir a eles, por exemplo, botões de fechamento são usados para fechar um diálogo.
Existem muitos tipos de eventos que podem ser inscritos para diferentes comportamentos de um aplicativo com base nos requisitos desse aplicativo, mas os eventos mais comumente usados são aqueles relacionados ao mouse e teclado, como,
- Click
- MouseDown
- MouseEnter
- MouseLeave
- MouseUp
- KeyDown
- KeyUp
Neste capítulo, usaremos alguns dos eventos básicos e mais comumente usados para entender como um evento de um controle específico pode ser vinculado ao código por trás de onde o comportamento será implementado, dependendo do que o usuário deseja fazer quando um evento específico ocorre.
Vamos dar uma olhada em um exemplo simples de um evento de clique de botão. A seguir, é fornecida a implementação XAML para o controle Button que é criado e inicializado com algumas propriedades e um evento Click (Click = "OnClick").
<Window x:Class = "XAMLEventHandling.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
Title = "MainWindow" Height = "350" Width = "604">
<Grid>
<Button x:Name = "button1" Content = "Click" Click = "OnClick"
Width = "150" Height = "30" HorizontalAlignment = "Center" />
</Grid>
</Window>
Sempre que este botão for clicado, ele irá disparar um OnClickevento e você pode adicionar qualquer tipo de comportamento como uma resposta ao clique. Vamos dar uma olhada na implementação do evento OnClick, que mostrará uma mensagem quando este botão for clicado.
using System;
using System.Windows;
using System.Windows.Controls;
namespace XAMLEventHandling {
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
private void OnClick(object sender, RoutedEventArgs e) {
MessageBox.Show("Button is clicked!");
}
}
}
Quando você compila e executa o código acima, ele produzirá a seguinte saída -
Ao clicar no botão, o evento click (OnClick) será disparado e a seguinte mensagem será exibida.
Agora, vamos dar uma olhada em um exemplo um pouco complexo onde vários eventos são tratados.
Exemplo
O exemplo a seguir contém uma caixa de texto com ContextMenu que manipula o texto dentro da caixa de texto.
O código XAML a seguir cria um TextBox, um ContextMenu e MenuItems com algumas propriedades e eventos, como Checked, Unchecked e Click.
<Window x:Class = "XAMLContextMenu.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
Title = "MainWindow" Height = "350" Width = "604">
<Grid>
<TextBox Name = "textBox1" TextWrapping = "Wrap" Margin = "10" Grid.Row = "7">
Hi, this is XAML tutorial.
<TextBox.ContextMenu>
<ContextMenu>
<MenuItem Header = "_Bold" IsCheckable = "True"
Checked = "Bold_Checked" Unchecked = "Bold_Unchecked" />
<MenuItem Header = "_Italic" IsCheckable = "True"
Checked = "Italic_Checked" Unchecked = "Italic_Unchecked" />
<Separator />
<MenuItem Header = "Increase Font Size" Click = "IncreaseFont_Click" />
<MenuItem Header = "_Decrease Font Size" Click = "DecreaseFont_Click" />
</ContextMenu>
</TextBox.ContextMenu>
</TextBox>
</Grid>
</Window>
Aqui está a implementação em C # para os diferentes eventos que serão disparados sempre que um item de menu for marcado, desmarcado ou clicado.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
namespace XAMLContextMenu {
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
private void Bold_Checked(object sender, RoutedEventArgs e) {
textBox1.FontWeight = FontWeights.Bold;
}
private void Bold_Unchecked(object sender, RoutedEventArgs e) {
textBox1.FontWeight = FontWeights.Normal;
}
private void Italic_Checked(object sender, RoutedEventArgs e) {
textBox1.FontStyle = FontStyles.Italic;
}
private void Italic_Unchecked(object sender, RoutedEventArgs e) {
textBox1.FontStyle = FontStyles.Normal;
}
private void IncreaseFont_Click(object sender, RoutedEventArgs e) {
if (textBox1.FontSize < 18) {
textBox1.FontSize += 2;
}
}
private void DecreaseFont_Click(object sender, RoutedEventArgs e) {
if (textBox1.FontSize > 10) {
textBox1.FontSize -= 2;
}
}
}
}
Quando você compila e executa o código acima, ele produzirá a seguinte saída -
Recomendamos que você execute o código de exemplo acima e experimente alguns outros eventos.
Eventos
Sr. Não. | Controles e descrição |
---|---|
1 | Checked Dispara quando um ToggleButton é verificado. (Herdado de ToggleButton) |
2 | Click Ocorre quando um controle de botão é clicado. (Herdado de ButtonBase) |
3 | ContextMenuClosing Ocorre antes de qualquer menu de contexto no elemento ser fechado. (Herdado de FrameworkElement.) |
4 | ContextMenuOpening Ocorre quando qualquer menu de contexto no elemento é aberto. (Herdado de FrameworkElement.) |
5 | DataContextChanged Ocorre quando o valor da propriedade FrameworkElement.DataContext é alterado. (Herdado de FrameworkElement) |
6 | DragEnter Ocorre quando o sistema de entrada relata um evento de arrastar subjacente com este elemento como destino. (Herdado de UIElement). |
7 | DragLeave Ocorre quando o sistema de entrada relata um evento de arrastar subjacente com este elemento como a origem. (Herdado de UIElement) |
8 | DragOver Ocorre quando o sistema de entrada relata um evento de arrastar subjacente com este elemento como o alvo potencial para soltar. (Herdado de UIElement) |
9 | DragStarting Ocorre quando uma operação de arrastar é iniciada. (Herdado de UIElement) |
10 | DropCompleted Ocorre quando uma operação de arrastar e soltar é encerrada. (Herdado de UIElement) |
11 | DropDownClosed Ocorre quando a parte suspensa da ComboBox é fechada. |
12 | DropDownOpened Ocorre quando a parte suspensa da ComboBox é aberta. |
13 | GotFocus Ocorre quando um UIElement recebe o foco. (Herdado de UIElement) |
14 | Holding Ocorre quando uma interação de espera não tratada de outra forma ocorre sobre a área de teste de clique deste elemento. (Herdado de UIElement) |
15 | Intermediate Dispara quando o estado de um ToggleButton é alterado para o estado indeterminado. (Herdado de ToggleButton) |
16 | IsEnabledChanged Ocorre quando a propriedade IsEnabled é alterada. (Herdado do controle) |
17 | KeyDown Ocorre quando uma tecla do teclado é pressionada enquanto o UIElement está em foco. (Herdado de UIElement) |
18 | KeyUp Ocorre quando uma tecla do teclado é liberada enquanto o UIElement está em foco. (Herdado de UIElement) |
19 | LostFocus Ocorre quando um UIElement perde o foco. (Herdado de UIElement) |
20 | ManipulationCompleted Ocorre quando uma manipulação no UIElement é concluída. (Herdado de UIElement) |
21 | ManipulationDelta Ocorre quando o dispositivo de entrada muda de posição durante uma manipulação. (Herdado de UIElement) |
22 | ManipulationInertiaStarting Ocorre quando o dispositivo de entrada perde contato com o objeto UIElement durante uma manipulação e a inércia começa. (Herdado de UIElement) |
23 | ManipulationStarted Ocorre quando um dispositivo de entrada começa uma manipulação no UIElement. (Herdado de UIElement) |
24 | ManipulationStarting Ocorre quando o processador de manipulação é criado pela primeira vez. (Herdado de UIElement) |
25 | SelectionChanged Ocorre quando a seleção de texto é alterada. |
26 | SizeChanged Ocorre quando a propriedade ActualHeight ou ActualWidth altera o valor em um FrameworkElement. (Herdado de FrameworkElement) |
27 | Unchecked Ocorre quando um ToggleButton está desmarcado. (Herdado de ToggleButton) |
28 | ValueChanged Ocorre quando o valor do intervalo muda. (Herdado de RangeBase) |