2010-07-09 3 views
1

이제 RoutedEvents를 배우려고합니다. 나는 버블 링과 터널링을 모두 이해합니다. 하지만 약간의 문제가 있습니다. 어떻게 처리해야할지 모르겠습니다.WPF : 하나의 특정 콘텐츠에서만 버블 링 이벤트 처리

난 내 자신의 정의의 UserControl (TabItem의 상속)에서 ItemsControl에있어. 이 itemsControl은 ListBox이거나 아직 선택되지 않은 일부 선택 자일 수 있습니다 (이 솔루션에 가장 적합한 항목에 따라 다름). 한 항목 (최선의 선택 방법은, 아마도 더블 어떻게 될지 아직 확실하지)가 선택 될 때

지금 내 UserControl을을 보유하고있는 TabControl에서 이벤트를 캡처해야합니다. 고맙게도 내 userControl이 XAML visualtree에 배치되면 버블 링 이벤트가 올라가고 이벤트가 TabControl에 도달 할 수 있습니다. 그러나 나는 아직도 이것을 구현하는 데 몇 가지 문제가있다.

1)의 나는 내가 다른 탭 또는)을 ItemsControlItems 외부처럼 (다른하고 DoubleClick을 wan't하지 않는 MouseDoubleClick로 설정한다고 가정 해 봅시다. 항상 올바른 이벤트인지 확인하기 위해 이벤트를 점검 할 수는 있겠지만 올바른 방법이라고 생각하지 않으며 문제를 일으킬 수도 있습니다. 내가 목록 상자에 인 selectionchanged과의 ItemsControl에 이벤트를 설정하면

2) 나는 그것이 TabControl에 도달 할 수 있도록 자체가 그것을 처리하지 않는리스트 박스를 확인해야합니다. 내가 어떻게 그럴 수 있니?

2와 동일 3))하지만 그것이 자신의를 SelectionChange 이벤트는 않을 것입니다 올릴 것이다 그래서있는 TabControl은 선택 자체입니다. 어떻게 작동할까요? 핸들러를 목록 상자와 TabControl에서 가져올 수 있습니까?

4) 사용해야하는 ItemsControl을 모릅니다. 만약 내가 항목을 doubleclick하고 ListBox를 너무 많이 사용하지 않을 이벤트를 처리하는 데에만 사용하고 있습니다. 그것은 선택과 같은 가망없는 많은 효과를 가지고 있습니다. 자신의 ItemsControl을 정의하거나 ListBox를 사용하여 선택과 같은 속성 중 일부를 덮어 쓰는 것이 더 낫습니다 (어떻게 수행 할 수 있습니까?).

5) 이벤트의 소스는 ItemsContainer 될하지만 항목 자체를 wan't. 거기에 접근 할 수있는 쉬운 방법이 있습니까?

6) 단추를 넣고 DataTemplate에서 단추를 통해 개체의 ID를 첨부하고 버튼 클릭이 처리 된 위치를 캡처하여 해당 항목을 식별하지 않는 경우를 가정 해 보겠습니다. 그 일을하는 부동산이 있습니까? 아니면 직접 정의해야합니까?

7) 내 자신의 이벤트를 만드는 최선의 행동 방침이 있습니까?

귀하의이 문제에 대한 귀하의 의견과 여기서 취하는 것이 가장 좋은 프로세스에 대한 의견은 분명합니다.

편집 : 요청한대로 조금 더 자세한 정보를 추가하기로 결정했습니다.

내가 원하는 대상은 무엇입니까? 프로그램을 시작할 때 탭이있는 TabControl이 있습니다. 이 탭은 개체 목록 (CompanyModel)을 보유하고 있기 때문에 나머지 탭과 다릅니다. 이 목록은 내가 언급 한 ItemsControl입니다. 이 목록에서 한 회사를 누르면 해당 회사에 대한 정보가 새 탭에 추가됩니다.

내 솔루션은 TabControl의 원본으로 TabItem 컬렉션을 만드는 것이 었습니다. 그런 다음 별도의 XAML 소스 파일에서 내 2 가지 유형의 TabItem을 정의 할 것입니다.이 파일은 무엇을 호출해야하는지, 기본적으로 새로운 usercontrol을 추가해야합니다. 하나는 목록이 나타나는 초기이고, 다른 하나는 CompanyModel을 생성자 매개 변수로 사용하여 그 정보를 보여줍니다.

이것은 회사 목록 tabitem을 seperatly로 정의하는 아이디어가 마음에 들지 않는 동안 작동합니다. 항목을 정의했거나 둘 다만 제공 할 수 있기 때문에 tabcontrol에서 정의 할 수 없습니다.

TabControl까지 선택한 회사의 ID를 거품 처리하는 List DataTemplate에 단추를 넣어서 처리하고 CompanyModel과 함께 새 TabItem을 추가하여이 아이디어를 시도했습니다. 그것은 단지 솔루션을 시도하고 Tabptrol뿐만 아니라 그들을 잡을 것이라고 회사 탭에 anpther 단추를 추가하는 경우 같은 문제가 있습니다.

그래서 내 문제는 원래 목록에서 이벤트를 버블 링하는 좋은 방법을 찾거나 내가 TabControl과 같은 위치에 탭을 정의 할 수 있다면 해결할 수 있습니다.

나는 다른 해결책이 TabControl에서 별개의 목록을 가질 것이라고 알고 있지만 다른 사람들은 이것이 어떻게 나오는지보고 싶습니다. 그리고 나는 이것을 어떻게하는지 배우고 싶습니다.

+0

2) 왜 TabControl에서 처리하려고합니까? 5)'이벤트 소스는 ItemsContainer가 될 것이지만 나는 아이템 자체를 wan't하지 않습니다. 그게 무슨 뜻입니까? ... 당신이 달성하고자하는 것에 대해 좀 더 자세하게 설명 할 필요가 있습니다. – Amsakanna

+0

나는 런타임시 컬렉션에 TabItems를 동적으로 던지고 그 컬렉션은 TabControl의 항목 소스입니다. 그래서 저는 생성자 매개 변수로 보여주는 객체를 사용하는 자체 TabItem을 정의했습니다. 따라서 목록의 항목을 누르면 해당 항목을 생성자 매개 변수로 사용하여 새 TabItem을 만들고 TabItem 목록에 추가해야합니다. TabControl쪽으로 위쪽으로 버블 링해야하므로 탭 자체에서이 목록에 액세스 할 수 없습니다. 다른 것은 그렇게 중요하지 않으며, propably 내가 스스로 찾을 수있는 무언가입니다. ListBoxItem이 아닌 CompanyModel에 액세스하지 못했습니다. –

답변