Exemplu:
private void Handler(object sender, MouseButtonEventArgs e) { // ce înseamnă aici: sender, e.Source și e.OriginalSource ? }

sender
– elementul care gestionează evenimentul (de care gestionarul de evenimente este atașat)MouseButtonEventArgs
moștenește de laRoutedEventArgs
:e.Source
– elementul pentru care a pornit evenimentul în arborele vizual (fie de sus în jos, fie de jos în sus)e.OriginalSource
– elementul cel mai adânc determinat prin hit testing din interiorul celui pentru care a pornit evenimentul în arborele vizual
Dat fiind arborele vizual al sursei XAML următoare:
<StackPanel x:Name="sp" UIElement.PreviewMouseLeftButtonDown="Handler"> <Button x:Name="btn1">butonul 1</Button> <Button x:Name="btn2">butonul 2</Button> <Button x:Name="btn3" Padding="5"> <Rectangle Width="100" Height="100" Fill="Blue" x:Name="r"/> </Button> </StackPanel>
și în codul din spate:
private void Handler(object sender, MouseButtonEventArgs e) { // ce înseamnă aici: sender, e.Source și e.OriginalSource ? }
Când se face clic cu butonul de maus stâng pe:
btn1
:sender
va fisp
,e.Source
va fibtn1
,e.OriginalSource
va fibtn1
btn2
:sender
va fisp
,e.Source
va fibtn2
,e.OriginalSource
va fibtn2
btn3
:sender
va fisp
,e.Source
va fibtn3
,e.OriginalSource
va fi:r
dacă se face clic pe pătratul albastrubtn3
dacă se face clic pe spațiul dinbtn3
din jurul luir
Am folosit evenimentul PreviewMouseLeftButtonDown
în loc de Click
deoarece Click
este un eveniment specific butoanelor, și când se face clic pe pătratul albastru din btn3
, e.OriginalSourc
e este tot btn3
în cazul evenimentului Click
. Nu am folosit nici evenimentul MouseLeftButtonDown
deoarece este gestionat de clasa Button
și nu ajunge la Rectangle
. Notația cu UIElement
. funcționează deoarece Button
și Rectangle
, ambele moștenesc de la UIElement
și XAML oferă posibilitatea de a atașa un gestionar de evenimente la strămoșul controalelor vizate de respectivul eveniment cu această notație.
Documentația oficială este aici. Alte informații relevante aici.