wpf
  1. wpf-routed-events

Routed Events - (WPF)

Routed events are an important part of developing user interfaces in Windows Presentation Foundation (WPF). A routed event is a type of event that can traverse the visual tree of a WPF application and report its occurrence to any interested handlers. This makes it easy to handle events at different levels of the application, rather than just at the source of the event.

Syntax

In WPF, routed events are defined using the RoutedEvent class. Here is an example of how to define and handle a routed event in WPF:

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace MyNamespace
{
  public class MyButton : Button
  {
    // Define the routed event
    public static readonly RoutedEvent MyButtonClickEvent =
      EventManager.RegisterRoutedEvent(
        "MyButtonClick", 
        RoutingStrategy.Bubble, 
        typeof(RoutedEventHandler), 
        typeof(MyButton)
      );

    // Add a CLR event wrapper for the routed event
    public event RoutedEventHandler MyButtonClick
    {
      add { AddHandler(MyButtonClickEvent, value); }
      remove { RemoveHandler(MyButtonClickEvent, value); }
    }

    // Override the OnClick method to raise the routed event
    protected override void OnClick()
    {
      base.OnClick();

      // Raise the routed event
      RoutedEventArgs args = new RoutedEventArgs(MyButtonClickEvent, this);
      RaiseEvent(args);
    }
  }

  public class MyWindow : Window
  {
    public MyWindow()
    {
      // Create a new instance of MyButton
      var button = new MyButton() { Content = "Click me!" };

      // Add a handler for the MyButtonClick event
      button.MyButtonClick += MyButton_Click;

      // Add the button to the window
      Content = button;
    }

    private void MyButton_Click(object sender, RoutedEventArgs e)
    {
      MessageBox.Show("Button clicked!");
    }
  }
}

Example

Here is an example of how to use a routed event in WPF:

<Window x:Class="MyNamespace.MyWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MyWindow" Height="300" Width="300">
  <Grid>
    <MyNamespace:MyButton x:Name="myButton"
                          Content="Click me!"
                          MyButtonClick="MyButton_Click" />
  </Grid>
</Window>
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace MyNamespace
{
  public partial class MyWindow : Window
  {
    public MyWindow()
    {
      InitializeComponent();
    }

    private void MyButton_Click(object sender, RoutedEventArgs e)
    {
      MessageBox.Show("Button clicked!");
    }
  }
}

Output

When you run the WPF application that uses a routed event, you should see a button labeled "Click me!" in the window. When you click the button, a message box should appear that says "Button clicked!".

Explanation

In the example code, we define a custom MyButton control that extends the standard Button control and raises a new routed event called MyButtonClick. We then create a new MyWindow class that contains a MyButton instance. We subscribe to the MyButtonClick event in the XAML markup, and handle the event in the code-behind by showing a message box. When the MyButton control is clicked, the event is raised and propagated up the visual tree until it is handled by the in the MyWindow class.

Use

Routed events allow you to handle events at different levels of your WPF application, making it easier to manage complex user interfaces. You can define and handle routed events as shown in the example code.

Important Points

  • Routed events are an important part of developing user interfaces in WPF.
  • Routed events propagate up the visual tree until they are handled by a subscriber.
  • Routed events can be defined using the RoutedEvent class, and raised using the RaiseEvent method.

Summary

In this page, we discussed how to use routed events in WPF. We covered the syntax, example, output, explanation, use, important points, and summary of using routed events in WPF. Routed events allow you to handle events at different levels of your WPF application, making it easier to manage complex user interfaces. You can define and handle routed events using the RoutedEvent class and the RaiseEvent method.

Published on: