『 direct  예제 결과 』

 

"btnSetColor: 라는 이벤트 핸들러에서 버튼의 배경색을 빨갱색으로

 

바꾸어주는 동작이 있고 "Button2" 의 이벤트 핸들러를 보면 라우트된

 

이벤트를 중지하는 동작이 있습니다.

 

그럼 실행을 시켜 결과를 보도록 하겠습니다.

 

 

 

위에 배치된 버튼은 direct 라우트된 이벤트가 적용이 되어 버튼의

 

배경식이 변경된 것을 볼 수 있습니다. 그리고 맨 아래 버튼은 라우트된

 

이벤트를 중지했기 때문에 배경색이 변경되지 않은 것을 볼 수 있습니다

 

 


#오라클자바교육센터#오라클#자바#닷넷#,net#WPF#WPF강좌#WPF예제#WPF졸작

 


『 direct 예제자료 』


​위의 프로젝트에서 "Direct_EventSetter.xaml" 로 새로운 창을 추가하고 다음 코드를 작성하겠습니다.


 

 

​실행 전에 잠깐 작성한 코드를 보도록 하겠습니다. XAML 코드를 보시면 <StackPanel.Resources>

</StackPanel.Resources>​ 사이에 <Style> 이 있고 그안에 EventSetter 가 보이실 것입니다.


이 Resource 는 StackPanel 의 스타일을 정의한 것인데 StackPanel 안에 모든 버튼 요소에

 

 Click이벤트를 "btnSetColor" 이라는 핸들러와 연결한 부분입니다.

 

그럼 StackPanel 안의 모든 버튼들은 이벤트를 등록하지 않았더라도 "btnSetColor" 이라는

 

핸들러를 실행하게 되죠


그리고 코드비하인드 페이지의 비하인드 코드를 보겠습니다 "btnSetColor" 라는 이벤트 핸들러에서

 

버튼의 배경색을 빨간색으로 바꾸어주는 동작이 있고 "Button2" 의 이벤트 핸들러를 보면

 

라우트된 이벤트를 중지하는 동작이 있습니다

 


​#오라클자바교육센터#오라클#자바#WPF#닷넷#WPF강좌#.net#WPF예

 

『 direct 

 

​direct 는 보통 .NET 표준 CRL 이벤트와 동일한 처리방식을 가지고 있습니다

 

이벤트가 발생된 요소 자체의 명시된 이벤트 핸들러만을 호출합니다.

 

그런데 라우트된 이벤트에 참가 할 수 있다는 특이점 있죠

 

dircet 라우트된 이벤트는 "EventSetter" 및 "EventTrigger" 에서많이 사용되어 집니다

 

EventSetter 는 라우트된 이벤트에 대한 응답으로 지정된 이벤트

 

핸들러를 호출하며 이러한 핸들러는 Style 을 참조하는 모든 요소에

 

적용되므로 각각의 개별 요소에 대해 핸들러를 연결하지 않아도 되는 특징이 있습니다 ^ㅇ^

 


​#오라클자바교육센터#오라클자바#오라클#자바#닷넷#.net#WPF#WPF강좌#WPF예제
 

 

 

 

 

 

 

 

 『tunneling 』 

 

 

속성 창이 나오면 좌측 Tab 에서 "응용 프로그램" 을 확인하시고

 

"출력형식" 에서 "콘솔 응용 프로그램" 으로 변경하여 선택합니다

 

 

 

 

이제 준비를 마무리하고 결과를 확인보도록 하죠

 

 

실행이 되면 디자인뷰어 에서 만든 창 뒤로 동시에 검은

 

콘솔 창이 같이 뜨는것이 확인되실 겁니다.

 

이벤트가 발생되면 이 콘솔 창에서 확인을 해보죠

 

이제 빨간색 원을 클릭하고 콘솔 창을 보도록 하죠

 

 

 

클릭되는 순간 옆에 코드에서 넣어준 문자가

 

나오게 됩니다 ^ㅇ^

 

 

#오라클자바교육센터#오라클#자바#.net#닷넷#WPF#WPF강좌#WPF예제

 

 

 

 

 

『 tunneling

 

 

 

 

 

간단한 예지임으로 코드는 매우 간다하게됩니다

 

단지 시나리오에서 말한 요소들만 배치가 되 있고 눈에

 

익숙하지 않은 코드가 있다면

 

"PreviewMouseDonw" 이라는 부분일 것입니다

 

이것은 단지 이벤트를 등록하는 것이고

 

나머지 코드를 완성한 후 다시 알아보죠

 

 

 

이제 코드가 모두 작성되었습니다

 

이제 실행을 시켜 결과를 볼텐데 그 전에 해야할 일이 있죠

 

결과를 콘솔에서 보기 위해 응용프로그램의

 

출력형식을 콘솔 응용 프로그래음으로 변경합니다

 

 

먼저 솔류션탐색기에서 프로젝트 이름에 마우스를

 

우클릭해서 "속성" 을 선택합니다

 

 

 

 

#오라클자바교육센터#오라클#자바#닷넷#.net#WPF#WPF강좌#WPF예제

 

 

 

 

『 tunneling  』

 

 

VisualStudo 2008 을 열어 전시간에 에제로 만들었던

 

"RoutedEventTest" 라는 프로젝트를 열도록 하겠습니다

 

다음으로 솔류션 탐색기에서 새로운 Window 를 추가하여

 

이름을 "Tunneling.xaml" 로 하겠습니다

 

 

 

예제를 만들기 전에 대략적인 시나오리오를 말씀드리자면

 

Window 안에 Grid 가 있고 Grid 안에 Button

 

Button 안에 Canvas , Canvas 안에 Ellipse 가 구조로

 

디자인을 하고 Element 에 이벤트가 발행을 하게 되면

 

tunneling 되는 결과를 Console 창에서 볼 수 있는 예제를 만듭니다

 

 

 

대략적인 예제의 예정입니다.

 

 

#오라클자바교육센터#오라클자바#오라클#자바#닷넷#,.net#WPF

 

 

 

 

『 라우팅 전략 실행 』

 

 

 

지난 강좌예제 에서 알아본 라우팅 전략의 실행 결과물을

 

보여드리겠습니다.

 

 

 

귀여운 팩맨 이미지를 띄우게 되었습니다

 

팩맨이미지 그러니까 Path 에서 마우스 좌클릭을 해보시면

 

ListBox 에 Path 에서 이벤트가 발생됨을 보이실겁니다

 

 

 

예상을 해보셨겠지만 버튼테서 클릭을 하게 되면 버튼에서

 

이벤트가 발생했다는 것을 알 수 있겠습니다

 

이번엔 버튼에서 마우스 우클륵해서 Window 에 등록한 이벤트

 

핸들러가 버블링을 통해 실행되는지 보겠습니다

 

실행 결과로 정상적으로 버블링을 통한 이벤트가 실행된것을

 

확인하실수가 있으실 겁니다

 

예제를 통해 이벤트가 하위요소에서 발생할 때 각각의 요소에

 

상위요소로 이벤트 전달할 핸들러를 등록하지 않더라도

 

라우트된 이벤트의 버블링을 통해 알아서 상위요소로 이벤트가

 

전달되어 지는것을 알수 있으실겁니다

 

그런데 눈치 채셨나요???

 

Path 에서 마우스 우클릭을 해보셨다면 Window 에 등록한

 

이벤트 핸들러가 실행되지 않음을 아실수 있으싥덥니다

 

그것은 제가 임의로 버블링되는 이벤트 라우팅을 중단했기때문이죠

 

다시 위으 코드하인드페이지에 작성한 코드를 보시면

 

"SometingClickted" 이란 이벤트 핸들에 보시면 마지막에

 

"e.Handled - true;" 라는 코드가 있으실겁니다

 

이 코드는 이벤트 핸들러의 RoutedEventArgs 클래스의

 

Handled 속성을 이용하여 이벤트 라우팅을 중단한 것입니다.

 

여러분은 때에 따라서 버블링되는 이벤트를 중단해야 할 경우에

 

Handled 의 속성을 "true" 로 변경하여 버블링을 중단할 수 있고

 

내부적으로 버를링은 되나 이미 이벤트를 처리한 것으로 다시

 

보고 할 수 있게됩니다.

 

 

 

 

 

『 라우팅 전략 예제 』


다음으로 코드비하인드 페이제에서 코드를 작성할 텐데 버튼의 

이벤트 핸들러를 작성하고 Path가 클릭되었을 때의 이벤트

핸들러를 작성하겠습니다.

그 전에 위에서 말했듯이 하위요소에서 이벤트가 발생하여 상위

요소로 버블링 되는 알아 보자고 했었던것 처럼

상위요소인 Window Level 에 이벤트를 등록하겠습니다.

Window의 이름이 위 XAML 에서 보듯이 "WindowBubbling"

으로 되어있기에 코드 비하인드 페이지에서 다음같이 코드작성!

 

 


이때 "TAB" 키를 두번 누르면 자동으로 아래처럼


이벤트에 대한 코드가 생성되게 될 것 입니다.


 

 


나중에 이 이벤트 핸들러에 메시지 박스를 띄워 이벤트가 실행


되는지 확인할 것입니다.


그럼 아래코드를 작성해 프로그램을 완성합니다.


 

 




위으 코드는 단순히 마우스 입력으로 클릭에 대한 이벤트가


발생하였을 때 버튼에서 이벤트를 처음 받게 되는지 , 아니면


Path 에서 이벤트를 받게 된 건지에 대해 단순히 ListBox에


보여주게 하려 한 것이며 , 이때 버튼에서 마우스오른쪽을


클릭해서 Window Level 의 이벤트 핸들러가 하위요소에서


발생된 Bubbling 에 의해 실행이 되는지를 MessageBox를


통해 보려 한 것입니다. 그럼 실행해 옮겨보죠!!


 


#오라클자바교육센터, #오라클, #자바, #오라클자바, #닷넷, #.net, #WPF, #WPF강좌


+ Recent posts