프로그래밍/실버라이트

[실버라이트] 이벤트 라우팅

쿠샨 2011. 1. 7. 16:46


실버라이트의 모든 객체들은 서로의 포함 관계에 따라 위, 아래 개념을 가집니다.
쉽게 말하면, 레이아웃 컨트롤은 하위에 다른 자식 컨트롤들을 가질 수가 있고, 이런 경우 레이아웃 컨트롤은 자식 컨트롤보다 위에 있으며 자식 컨트롤들은 아래에 있다고 표현 합니다.( 부모 / 자식 관계라 표현)

<Grid>
      <Canvas>
            <Rectangle Fill="Black" />
            <Button Content="Button" />
      </Canvas>

      <StackPanel>
            <TextBlock Text="텍스트 1"/>
            <TextBox Text="박스 1"/>
      </StackPanel>
</Grid>

다음과 같은 XAML을 트리로 표현 하면,


이렇게 트리 구조를 그린 이유는 이벤트 라우팅을 이해하기 위해서는 상, 하위 개념을 알아야 하기 때문입니다.
실버라이트의 이벤트 라우팅은 가장 하위에 있는 객체에서 이벤트가 발생하면 이벤트는 하위에서 상위로 한 단계씩 올라가면서 발생합니다. 이렇게 트리 구조를 따라 이벤트가 발생하는 방식을 이벤트 라우팅이라고 하며, 아래에서 위로 올라가는 이벤트 라우팅 방식을 버블링(Bubbling) 이라고 합니다. 실버라이트 에서는 반대로 위에서 아래로 내려오는 터널링(Tunneling)을 지원 하지 않습니다.

실버라이트 에서 이벤트 라우팅을 지원하는 이벤트는 다음과 같습니다.


위에 나열된 이벤트는 대부분 키보드, 마우스를 통한 사용자에 의해 발생하는 입력 이벤트가 대부분 입니다.

그렇다면 위의 트리 구조의 가장 하위 컨트롤인 Button 에서 이벤트가 발생 하면 이벤트가 어떻게 전달 될까요?

그림에 표현 해두었다 싶이 Button에서 Event 발생 할 경우 이 이벤트는 Canvas를 거쳐 Grid 까지 전달이 됩니다.
Grid에서 Button에 이벤트가 일어 날 경우 어떠한 처리를 해주고 싶을때 이벤트 라우팅을 이용해 손쉽게 구현 할 수 있습니다.

이벤트 핸들러 생성 및 구현 방법은 이벤트에 대해 포스팅 해 놓은 자료를 참조 하시기를 ^^;;

다음에는 이벤트 라우팅 중지 법에 대해 알아 보겠습니다.