<Window x:Class="WpfApplication1.HaltingEvents" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Halting Events" Height="300" Width="300"> <Grid HorizontalAlignment="Center" VerticalAlignment="Center"> <Button PreviewMouseDown="PreviewMouseDownButton" MouseDown="MouseDownButton"> <Grid PreviewMouseDown="PreviewMouseDownGrid" MouseDown="MouseDownGrid"> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Canvas PreviewMouseDown="PreviewMouseDownCanvas" MouseDown="ButtonDownCanvas" Width="20" Height="18" VerticalAlignment="Center"> <Ellipse PreviewMouseDown="PreviewMouseDownEllipse" MouseDown="MouseDownEllipse" x:Name="myEllipse" Canvas.Left="1" Canvas.Top="1" Width="16" Height="16" Fill="Yellow" Stroke="Black" /> <Ellipse Canvas.Left="4.5" Canvas.Top="5" Width="2.5" Height="3" Fill="Black" /> <Ellipse Canvas.Left="11" Canvas.Top="5" Width="2.5" Height="3" Fill="Black" /> <Path Data="M 5,10 A 3,3 0 0 0 13,10" Stroke="Black" /> </Canvas> <TextBlock Grid.Column="1">Click!</TextBlock> </Grid> </Button> </Grid> </Window> //File:Window.xaml.cs using System; using System.Windows; using System.Diagnostics; namespace WpfApplication1 { public partial class HaltingEvents : System.Windows.Window { public HaltingEvents() { InitializeComponent(); } void ButtonDownCanvas(object sender, RoutedEventArgs e) { Debug.WriteLine("ButtonDownCanvas"); e.Handled = true; } void PreviewMouseDownButton(object sender, RoutedEventArgs e) { Debug.WriteLine("PreviewMouseDownButton"); } void MouseDownButton(object sender, RoutedEventArgs e) { Debug.WriteLine("MouseDownButton"); } void PreviewMouseDownGrid( object sender, RoutedEventArgs e) { Debug.WriteLine("PreviewMouseDownGrid"); } void MouseDownGrid(object sender, RoutedEventArgs e) { Debug.WriteLine("MouseDownGrid"); } void PreviewMouseDownCanvas(object sender, RoutedEventArgs e) { Debug.WriteLine("PreviewMouseDownCanvas"); } void PreviewMouseDownEllipse(object sender, RoutedEventArgs e) { Debug.WriteLine("PreviewMouseDownEllipse"); } void MouseDownEllipse(object sender, RoutedEventArgs e) { Debug.WriteLine("MouseDownEllipse"); } } }