Despre parametrii primiți de gestionarii de evenimente rutate (RoutedEventArgs, MouseButtonEventArgs etc.)

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 la RoutedEventArgs:
    • 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 fi sp, e.Source va fi btn1, e.OriginalSource va fi btn1
  • btn2: sender va fi sp, e.Source va fi btn2, e.OriginalSource va fi btn2
  • btn3: sender va fi sp, e.Source va fi btn3, e.OriginalSource va fi:
    • r dacă se face clic pe pătratul albastru
    • btn3 dacă se face clic pe spațiul din btn3 din jurul lui r

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.OriginalSource 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.

Niciun comentariu:

Trimiteți un comentariu