<Window x:Class="RoutedEvents.BubbledLabelClick" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="BubbledLabelClick" Height="360" Width="330" MouseUp="SomethingClicked" > <StackPanel MouseUp="SomethingClicked"> <Label Margin="5" BorderThickness="1" MouseUp="SomethingClicked" HorizontalAlignment="Left" > <StackPanel MouseUp="SomethingClicked" > <TextBlock Margin="3" MouseUp="SomethingClicked">label</TextBlock> <Image Source="c:\image.jpg" Stretch="None" MouseUp="SomethingClicked" /> <TextBlock Margin="3" MouseUp="SomethingClicked">test</TextBlock> </StackPanel> </Label> <ListBox Margin="5" Name="lstMessages" Grid.Row="1"></ListBox> <CheckBox Margin="5" Name="chkHandle">Handle first event</CheckBox> <Button Click="cmdClear_Click" HorizontalAlignment="Right" Margin="5" Padding="3">Clear List</Button> </StackPanel> </Window> //File:Window.xaml.cs using System; using System.Collections.Generic; 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.Shapes; namespace RoutedEvents { public partial class BubbledLabelClick : System.Windows.Window { public BubbledLabelClick() { InitializeComponent(); } protected int eventCounter = 0; private void SomethingClicked(object sender, RoutedEventArgs e) { eventCounter++; string message = "#" + eventCounter.ToString() + ":\r\n" + " Sender: " + sender.ToString() + "\r\n" + " Source: " + e.Source + "\r\n" + " Original Source: " + e.OriginalSource; lstMessages.Items.Add(message); e.Handled = (bool)chkHandle.IsChecked; } private void cmdClear_Click(object sender, RoutedEventArgs e) { eventCounter = 0; lstMessages.Items.Clear(); } } }