2010-08-23 3 views
1

DataTemplateSelector를 사용하여 목록의 항목 유형에 따라 사용할 템플릿을 동적으로 결정하는 ListBox가 있습니다. 이제 DataTemplate 내의 컨트롤에 의해 해고 될 수있는 이벤트를 에 연결하려고합니다. 예를 들어, 템플릿 중 하나에 체크 박스가있는 경우 체크 박스를 선택하면 컨트롤을 사용하는 응용 프로그램에 알리고 싶습니다. 다른 템플릿에 버튼이있는 경우 버튼을 클릭하면 알림을 받고 싶습니다.DataTemplate의 일부로 동적으로 들어오는 컨트롤에 이벤트를 연결하려면 어떻게해야합니까?

또한 ListBox이므로 많은 항목이 동일한 템플릿을 가질 수 있습니다. 그래서 일종의 RoutedEventArgs가 필요합니다. OriginalSource에서 걸어서 이벤트를 처리 할 수있는 컨텍스트 정보를 얻을 수 있습니다.

내 솔루션은 MouseLeftButtonUp을 사용했습니다. 이 TextBlocks 잘 작동하지만 CheckBox 및 단추 컨트롤을 true로 처리 된 것처럼 보이므로 이벤트가 거품이 나지 않습니다. 이러한 이벤트를 처리하기 위해 어떻게해야 호출 응용 프로그램에서 처리기를 할당 할 수 있습니까? 이벤트 핸들러는 당신이해야 다음 배치되는 곳

당신은 사용자 컨트롤의 XAML에서 템플릿을 정의하는 경우

답변

0

를 (또한, 실버 실제로 DataTemplateSelector를 지원하지 않기 때문에 나는 그것을 구현하는이 example 따라) 단순히 Xaml에서 이벤트 처리기를 할당 할 수 있습니다.

그러나 특정 시나리오에서 당신은 또한 AddHandler 방법을 통해 MouseLeftButtonUp 이벤트를 수신 할 수 개요 : -

myListBox.AddHandler(UIElement.MouseLeftButtonUpEvent, myListBox_MouseLeftButtonUp, true); 

...

private void myListBox_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    //e.OriginalSource available for your inspection 
} 

참고 AddHandler를 사용에 true를 전달하여 세 번째 매개 변수는 처리 여부에 관계없이 이벤트를 가져옵니다.

+0

감사합니다. XAML에서 이벤트 처리기를 지정하는 다른 옵션에 대해 알아 보려고합니다. 내 문제는 여기에 XAML은 응용 프로그램에서 참조되는 클래스 라이브러리의 일부입니다. 응용 프로그램에서 사용자 정의 컨트롤을 만들었 기 때문입니다. 처리기가이 프로젝트를 참조 할 프로젝트에있을 경우 XAML에서 이벤트 처리기를 어떻게 추가 할 수 있습니까? – theraju

관련 문제