Eventos
En WPF, los eventos son mecanismos que permiten a los controles y elementos de la interfaz de usuario notificar a otros elementos sobre cambios o interacciones. Los eventos en WPF siguen un modelo de programación basado en delegados y son gestionados a través de los conceptos de “routed events” (eventos enrutados). Aquí te explico cómo son los eventos en WPF y te proporciono algunos ejemplos de uso:
Eventos en WPF:
- Routed Events (Eventos enrutados):
- WPF introduce el concepto de eventos enrutados, lo que significa que un evento puede viajar a través de la jerarquía de elementos en el árbol visual de la interfaz de usuario. Hay tres tipos de eventos enrutados en WPF: túnel (tunneling), burbujeo (bubbling) y directo.
- Eventos Básicos:
- Algunos eventos básicos están presentes en muchos controles de WPF, como
Click
(para botones),SelectionChanged
(para listas y combo boxes),MouseEnter
,MouseLeave
, etc.
- Algunos eventos básicos están presentes en muchos controles de WPF, como
- Manejo de Eventos:
- Puedes manejar eventos directamente en XAML o en el código detrás (code-behind) de tu archivo XAML. También puedes suscribirte a eventos en tiempo de ejecución.
Ejemplos de Uso:
Ejemplo 1: Manejo de Click en un Botón
<Button Content="Haz clic" Click="Button_Click" />
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Botón clicado");
}
Ejemplo 2: Evento MouseEnter y MouseLeave en un Elemento
<TextBlock Text="Pasa el ratón por aquí" MouseEnter="TextBlock_MouseEnter" MouseLeave="TextBlock_MouseLeave" />
private void TextBlock_MouseEnter(object sender, MouseEventArgs e)
{
((TextBlock)sender).Foreground = Brushes.Red;
}
private void TextBlock_MouseLeave(object sender, MouseEventArgs e)
{
((TextBlock)sender).Foreground = Brushes.Black;
}
Ejemplo 3: Evento SelectionChanged en un ComboBox
<ComboBox SelectionChanged="ComboBox_SelectionChanged">
<ComboBoxItem Content="Opción 1" />
<ComboBoxItem Content="Opción 2" />
<ComboBoxItem Content="Opción 3" />
</ComboBox>
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox comboBox = (ComboBox)sender;
MessageBox.Show($"Opción seleccionada: {comboBox.SelectedItem}");
}
Estos son solo algunos ejemplos básicos de cómo trabajar con eventos en WPF. Puedes utilizar eventos para responder a interacciones del usuario, como clics de botón, cambios de selección, entrada del teclado, entre otros. Además, puedes aprovechar los eventos enrutados para manejar interacciones en la jerarquía de elementos.
Los eventos enrutados en WPF son un concepto clave que permite que los eventos sean propagados a través de la jerarquía de elementos en el árbol visual de la interfaz de usuario. Hay tres tipos principales de eventos enrutados en WPF: eventos de túnel (tunneling), eventos de burbujeo (bubbling) y eventos directos. Aquí hay más información sobre cada tipo:
Eventos de Túnel (Tunneling):
- Descripción: Los eventos de túnel viajan desde el elemento raíz hacia el origen del evento, descendiendo por la jerarquía de elementos.
- Prefijo de Evento: Comienzan con “Preview” (por ejemplo,
PreviewMouseDown
,PreviewKeyDown
). - Ejemplo de Uso:
<Grid PreviewMouseDown="Grid_PreviewMouseDown"> <Button Content="Haz clic aquí" /> </Grid>
private void Grid_PreviewMouseDown(object sender, MouseButtonEventArgs e) { MessageBox.Show("Evento de túnel (PreviewMouseDown) en el Grid"); }
Eventos de Burbujeo (Bubbling):
- Descripción: Los eventos de burbujeo viajan desde el origen del evento hacia el elemento raíz, ascendiendo por la jerarquía de elementos.
- Ejemplo de Uso:
<Button Content="Haz clic aquí" Click="Button_Click" />
private void Button_Click(object sender, RoutedEventArgs e) { MessageBox.Show("Evento de burbujeo (Click) en el botón"); }
Eventos Directos:
- Descripción: Los eventos directos no viajan hacia arriba ni hacia abajo en la jerarquía. Se quedan en el elemento que originó el evento.
- Ejemplo de Uso:
<TextBox KeyDown="TextBox_KeyDown" />
private void TextBox_KeyDown(object sender, KeyEventArgs e) { MessageBox.Show("Evento directo (KeyDown) en el TextBox"); }
Propagación y Manipulación de Eventos:
- Manipulación de Eventos: Los eventos enrutados permiten manipular el evento en diferentes puntos a lo largo de la ruta de propagación. Puedes agregar manejadores de eventos en múltiples elementos.
- Cancelar Eventos: Puedes cancelar la propagación del evento estableciendo
e.Handled = true;
en el manejador de eventos.
private void SomeElement_MouseDown(object sender, MouseButtonEventArgs e)
{
// Cancelar la propagación del evento
e.Handled = true;
}
- Rutas de Eventos: La ruta de propagación de eventos está determinada por la estructura del árbol visual. Los eventos de túnel descienden desde el elemento raíz hasta el origen, mientras que los eventos de burbujeo ascienden desde el origen hasta el elemento raíz.
En WPF, los eventos de túnel (tunneling) están precedidos por el prefijo “Preview”. Aquí hay algunos ejemplos de eventos de túnel comunes:
- PreviewMouseDown:
- Descripción: Se desencadena antes de que se produzca el evento
MouseDown
. - Ejemplo:
<Button PreviewMouseDown="Button_PreviewMouseDown" Content="Haz clic aquí" />
- Descripción: Se desencadena antes de que se produzca el evento
- PreviewKeyDown:
- Descripción: Se desencadena antes de que se produzca el evento
KeyDown
. - Ejemplo:
<TextBox PreviewKeyDown="TextBox_PreviewKeyDown" />
- Descripción: Se desencadena antes de que se produzca el evento
- PreviewMouseMove:
- Descripción: Se desencadena antes de que se produzca el evento
MouseMove
. - Ejemplo:
<Border PreviewMouseMove="Border_PreviewMouseMove" Width="100" Height="100" Background="LightGray"> <!-- Contenido del Border --> </Border>
- Descripción: Se desencadena antes de que se produzca el evento
- PreviewGotKeyboardFocus:
- Descripción: Se desencadena antes de que un elemento obtenga el foco del teclado.
- Ejemplo:
<TextBox PreviewGotKeyboardFocus="TextBox_PreviewGotKeyboardFocus" />
- PreviewLostKeyboardFocus:
- Descripción: Se desencadena antes de que un elemento pierda el foco del teclado.
- Ejemplo:
<TextBox PreviewLostKeyboardFocus="TextBox_PreviewLostKeyboardFocus" />
Los eventos de burbujeo (bubbling) en WPF son aquellos que viajan desde el origen del evento hacia el elemento raíz, ascendiendo por la jerarquía de elementos. Aquí tienes algunos ejemplos de eventos de burbujeo comunes:
- MouseDown:
- Descripción: Se desencadena cuando se produce un clic del mouse.
- Ejemplo:
<Button MouseDown="Button_MouseDown" Content="Haz clic aquí" />
- KeyDown:
- Descripción: Se desencadena cuando se presiona una tecla del teclado.
- Ejemplo:
<TextBox KeyDown="TextBox_KeyDown" />
- MouseMove:
- Descripción: Se desencadena cuando se mueve el mouse sobre un elemento.
- Ejemplo:
<Border MouseMove="Border_MouseMove" Width="100" Height="100" Background="LightGray"> <!-- Contenido del Border --> </Border>
- GotKeyboardFocus:
- Descripción: Se desencadena cuando un elemento obtiene el foco del teclado.
- Ejemplo:
<TextBox GotKeyboardFocus="TextBox_GotKeyboardFocus" />
- LostKeyboardFocus:
- Descripción: Se desencadena cuando un elemento pierde el foco del teclado.
- Ejemplo:
<TextBox LostKeyboardFocus="TextBox_LostKeyboardFocus" />
- MouseDown: