Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Canvas.Left="25" Canvas.Top="12"/>
<Ellipse Name = "innerEllipse" Fill ="Yellow"
Height = "15" Width ="36"
Canvas.Top="17" Canvas.Left="32"/>
</Canvas>
</StackPanel>
</Button>
</Grid>
</Window>
Обратите внимание, что в открывающем определении элемента
Button
Click
Click
RoutedEventHandler
object
System.Winodws.RoutedEventArgs
public void btnClickMe_Clicked(object sender, RoutedEventArgs e)
{
<b> // Делать что-нибудь, когда на кнопке произведен щелчок.</b>
MessageBox.Show("Clicked the button");
}
После запуска приложения окно сообщения будет отображаться независимо от того, на какой части содержимого кнопки был выполнен щелчок (зеленый элемент
Ellipse
Ellipse
Label
Button
Click
Button
К счастью, маршрутизируемые события WPF позаботятся об автоматическом вызове единственного обработчика события
Click
Точнее говоря, маршрутизируемое событие может использовать три стратегии маршрутизации. Если событие перемещается от точки возникновения вверх к другим областям определений внутри дерева объектов, то его называют пузырьковым событием. И наоборот, если событие перемещается от самого внешнего элемента (например,
Window
Роль пузырьковых маршрутизируемых событий
В текущем примере, когда пользователь щелкает на внутреннем овале желтого цвета, событие
Click
Canvas
StackPanel
Button
Label
StackPanel
Button
Благодаря такому шаблону пузырьковых маршрутизируемых событий не придется беспокоиться о регистрации специфичных обработчиков события
Click
В целях иллюстрации предположим, что щелчок на элементе управления
outerEllipse
MouseDown
Ellipse
Click
MouseDown
MouseUp
<Button Name="btnClickMe" Height="75" Width = "250"
Click ="btnClickMe_Clicked">
<StackPanel Orientation ="Horizontal">
<Label Height="50" FontSize ="20">Fancy Button!</Label>
<Canvas Height ="50" Width ="100" >
<Ellipse Name = "outerEllipse" Fill ="Green"
Height ="25" <b>MouseDown ="outerEllipse_MouseDown"</b>
Width ="50" Cursor="Hand" Canvas.Left="25" Canvas.Top="12"/>
<Ellipse Name = "innerEllipse" Fill ="Yellow" Height = "15" Width ="36"
Canvas.Top="17" Canvas.Left="32"/>
</Canvas>
</StackPanel>
</Button>
Затем реализуйте подходящий обработчик событий, который в демонстрационных целях будет просто изменять свойство
Title
public void outerEllipse_MouseDown(object sender, MouseButtonEventArgs e)
{
<b> // Изменить заголовок окна.</b>