Я прочитал здесь и в MS docs , что это определяется тестированием попаданий, но пример в конце этого вопроса против этого, или я так понимаю, в настоящее время.
Здесь Я прочитал, что это первый объект, вызвавший событие, и я не знаю, что это значит, то есть в приведенном ниже примере.
Мое текущее понимание
Учитывая этот код:
private void Handler(object sender, RoutedEventArgs e)
{
// what does it mean here: sender, e.Source and e.OriginalSource ?
}
- отправитель - элемент, который обрабатывает событие (к которому присоединен обработчик)
- e.Source - элемент, для которого событие начало прогрессировать через визуальное дерево (сверху вниз или снизу вверх)
- e.OriginalSource - самый глубокий элемент, определенный при тестировании попадания, который находится внутри того, для которого событие начало прогрессировать через визуальное дерево
Пример
Учитывая визуальное дерево следующегоисходный XAML:
<StackPanel x:Name="sp" Button.Click="Handler">
<Button x:Name="btn1">button 1</Button>
<Button x:Name="btn2">button 2</Button>
<Button x:Name="btn3" Padding="5">
<Rectangle Width="100" Height="100" Fill="Blue" x:Name="r"/>
</Button>
</StackPanel>
итот же обработчик, что и выше:
private void Handler(object sender, RoutedEventArgs e)
{
// what does it mean here: sender, e.Source and e.OriginalSource ?
}
При нажатии на:
btn1
: sender
будет sp
, e.Source
будет btn1
, e.OriginalSource
будет btn1
btn2
: sender
будет sp
, e.Source
будет btn2
, e.OriginalSource
будет btn2
btn3
: sender
будет sp
, e.Source
будет btn3
, e.OriginalSource
будет: r
, если щелчок сделан по синему Rectangle
(здесь я ошибся и не знаю почему) btn3
, если щелчок сделан по пробелу в btn3
вокруг r
Вместо r
в последнем элементе в списке выше, я получаю e.OriginalSource == btn3
.
Официальные документы: здесь .
Спасибо.