This blog lists of routed event generated by mouse in the Grid.
XAML Code
<Window x:Class="Part3_RoutedEventViewer.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Examining Routed Events" Height="300" Width="300"
WindowState="Maximized">
<Grid x:Name="gridMain">
<Grid.Resources>
<LinearGradientBrush x:Key="lb" EndPoint="0.398,-0.083" StartPoint="0.398,0.688">
<GradientStop Color="#FFFEA857" Offset="0"/>
<GradientStop Color="#FFFFFFFF" Offset="0.745"/>
</LinearGradientBrush>
<DataTemplate x:Key="RoutedEventNameTemplate">
<TextBlock Text="{Binding Path=RoutedEventName}" Width="auto" Margin="0,0,0,0" />
</DataTemplate>
<DataTemplate x:Key="SenderNameTemplate">
<TextBlock Text="{Binding Path=SenderName}" Width="auto" Margin="0,0,0,0"/>
</DataTemplate>
<DataTemplate x:Key="ArgsSourceTemplate">
<TextBlock Text="{Binding Path=ArgsSource}" Width="auto" Margin="0,0,0,0"/>
</DataTemplate>
<DataTemplate x:Key="OriginalSourceTemplate">
<TextBlock Text="{Binding Path=OriginalSource}" Width="auto" Margin="0,0,0,0"/>
</DataTemplate>
<Style x:Key="headerContainerStyle" TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
<Grid x:Name="gd" Background="{StaticResource lb}">
<TextBlock Text="{TemplateBinding Content}"
FontSize="{TemplateBinding FontSize}"
Foreground="Black"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="100*"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<Button x:Name="btnTop" Margin="10" Padding="2" Content="Examining Routed Events" Height="auto"/>
<Button x:Name="btnClearItems" Margin="10" Padding="2" Content="Clear Items" Height="auto" Click="btnClearItems_Click"/>
</StackPanel>
<ListView x:Name="lvResults" Margin="0,0,0,0" IsSynchronizedWithCurrentItem="True" Grid.Row="2" >
<ListView.View>
<GridView ColumnHeaderContainerStyle="{StaticResource headerContainerStyle}" >
<GridViewColumn Header="RoutedEventName" Width="150" CellTemplate="{StaticResource RoutedEventNameTemplate}"/>
<GridViewColumn Header="SenderName" Width="100" CellTemplate="{StaticResource SenderNameTemplate}"/>
<GridViewColumn Header="ArgsSource" Width="100" CellTemplate="{StaticResource ArgsSourceTemplate}"/>
<GridViewColumn Header="OriginalSource" Width="100" CellTemplate="{StaticResource OriginalSourceTemplate}"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
Code Behind Codes
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace Part3_RoutedEventViewer
{
/// <summary>
/// Demo application that displays some data about the events
/// that were recieved by a users actions. Which allows users
/// to see the difference between tunneling/routed events
/// </summary>
public partial class Window1 : Window
{
#region Ctor
/// <summary>
/// Wires up several of the standard <see cref="FrameworkElement">
/// FrameworkElement</see> Tunneling/Bubbling <see cref="RoutedEvent">RoutedEvents</see>.
/// This demo also displays some data about the events that were recieved by
/// a users actions.
/// </summary>
public Window1()
{
InitializeComponent();
UIElement[] els = { this, gridMain, btnTop, lvResults };
foreach (UIElement el in els)
{
//keyboard
el.PreviewKeyDown += GenericHandler;
el.PreviewKeyUp += GenericHandler;
el.PreviewTextInput += GenericHandler;
el.KeyDown += GenericHandler;
el.KeyUp += GenericHandler;
el.TextInput += GenericHandler;
//Mouse
el.MouseDown += GenericHandler;
el.MouseUp += GenericHandler;
el.PreviewMouseDown += GenericHandler;
el.PreviewMouseUp += GenericHandler;
//Stylus
el.StylusDown += GenericHandler;
el.StylusUp += GenericHandler;
el.PreviewStylusDown += GenericHandler;
el.PreviewStylusUp += GenericHandler;
el.AddHandler(Button.ClickEvent, new RoutedEventHandler(GenericHandler));
}
}
#endregion
#region Private Methods
/// <summary>
/// Creates a new <see cref="EventDemoClass">EventDemoClass</see>
/// to represent the <see cref="RoutedEvent">RoutedEvent</see>.
/// And adds this new EventDemoClass to the listbox
/// </summary>
private void GenericHandler(object sender, RoutedEventArgs e)
{
lvResults.Items.Add(new EventDemoClass()
{
RoutedEventName = e.RoutedEvent.Name,
SenderName = typeWithoutNamespace(sender),
ArgsSource = typeWithoutNamespace(e.Source),
OriginalSource = typeWithoutNamespace(e.OriginalSource)
});
}
/// <summary>
/// Returns the type name without the namespace portion
/// </summary>
private string typeWithoutNamespace(object obj)
{
string[] astr = obj.GetType().ToString().Split('.');
return astr[astr.Length - 1];
}
/// <summary>
/// Clears the listbox of events
/// </summary>
private void btnClearItems_Click(object sender, RoutedEventArgs e)
{
lvResults.Items.Clear();
}
#endregion
}
#region EventDemoClass CLASS
/// <summary>
/// A simpy data class that is used to display event data
/// </summary>
public class EventDemoClass
{
public string RoutedEventName { get; set; }
public string SenderName { get; set; }
public string ArgsSource { get; set; }
public string OriginalSource { get; set; }
}
#endregion
}
Join the conversation! Your thoughts help the community grow.