[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) onClick event for a mouse button

Bubbling event

  • event를 발생시킨 대상 요소에 붙은 event handler를 시작으로, 그 element tree의 root에 도달할 때까지 각 부모의 elements를 차례로 순회
  • Ex) MouseButtonDown Keydown

Tunneling event

  • element tree의 root에서 시작하여 event를 발생시킨 element 까지 순회 (Bubbling 의 반대 개념)
  • tunneling event의 naming은 전부 앞에 preview가 붙는다.
  • Ex) previewdownkey previewmousebuttondown

코드 예제

<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)

Categories:

Updated:

Leave a comment