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
}