[C#] WPF - Direct / Bubbling / Tunneling Event
Updated:
- Routed events의 종류
- event 발생 시 element tree를 순회하기 때문에 routed라는 용어 사용
- method 마다 event의 종류가 다르므로, 어떤 method가 어떤 event를 발생시키는지 정도는 이해하고 있어야함
Direct event
- event를 발생시킨 요소에 등록된 event handler에만 event 전달 (라우팅 X)
- event 대상 요소의 문맥 내에서 의미가 있는 event에 대해서만 사용
- Ex)
onClickevent for a mouse button
Bubbling event
- event를 발생시킨 대상 요소에 붙은 event handler를 시작으로, 그 element tree의 root에 도달할 때까지 각 부모의 elements를 차례로 순회
- Ex)
MouseButtonDownKeydown
Tunneling event
- element tree의 root에서 시작하여 event를 발생시킨 element 까지 순회 (Bubbling 의 반대 개념)
- tunneling event의 naming은 전부 앞에
preview가 붙는다. - Ex)
previewdownkeypreviewmousebuttondown
코드 예제
<Grid>
<Button Width="250" Height="80" Name="mButton" Click="mButton_Click">
<StackPanel Width="250" Height="80" Name="mSp" Orientation="Horizontal" >
<Label Name="mLabel" FontSize="15" Height="30">About RoutedEvent</Label>
<Canvas Name="mCanv" MouseDown="mCanv_MouseDown">
<Ellipse Name="mEllipse" Margin="20,20" Height="35" Width="35" Fill="HotPink" MouseDown="mEllipse_MouseDown"/>
</Canvas>
</StackPanel>
</Button>
</Grid>
- 위의 디자인에서 Ellipse를 클릭 시 Bubbling event로 Ellipse - Canvas - Button 순으로 event 호출
- Button 클릭 시 단순 Button event만 호출
ref :
Difference between Bubbling and Tunneling events
WPF 라우팅 이벤트의 이해(Routed Event)
Leave a comment