2009-03-17 5 views
3

사용자 정의 패널을 ItemsHost로 사용하는 사용자 정의 ListBox가 있습니다. 마우스 휠 입력을 제어하려고하므로 휠을 돌리면 선택한 단일 항목이 변경됩니다.WPF : ListBox 또는 Panel이 마우스 휠 탐색을 담당합니까?

나는이 방법을 사용하는 것이 가장 좋은 방법은 OnPreviewMouseWheel 이벤트를 처리하는 것이라고 생각합니다.하지만이 방법은 가로 휠 데이터를 제공하지 않기 때문에 원하는 것입니다.

이제 큰 질문 : OnPreviewMouseWheel을 처리 할 수있는 가장 좋은 방법이 있습니까? ListBox (기본적으로 Panel의 자식 요소 배열에 대한 단서가 없음) 또는 Panel (기본적으로 자식 요소의 "IsSelected"속성에 대한 단서가 없음)에서?

답변

0

ListBox에서해야한다고 생각합니다. ListBox은 선택과 관련된 모든 작업을 처리하는 Selector에서 상속됩니다.

마우스 휠이 선택 동작은 (그것도 표준 ListBox 첫째을 사용하여 구현하는 것이 좋습니다 수 있습니다) Panel 어떤 종류의 적용 할 수있는, 당신은 ListBox 선택 로직의 외부 어딘가에 Panel을 사용할 수 있습니다 말이 안된다.

0

현재 선택된 항목에 대해서만 알고 있으므로 ListBox에서 수행해야합니다. 패널은 선택 여부를 원하지 않거나 알 필요가 없습니다.

이 기능을 여러 번 다시 사용할 수 있도록 첨부 된 동작으로 구현하는 것이 좋습니다.

이렇게하려면 다음을 수행하십시오.
- MouseWheelChangesSelection (true/false)이라는 연결된 속성으로 새 클래스 (ListBoxSelector라고도 함)를 만듭니다.
- PropertyNotifyChangedEvent를 추가하고 속성이 변경되면 PreviewMouseWheel/MouseWheel 이벤트에 대한 이벤트 리스너를 등록합니다.

다음 중 하나를 사용하여 현재 선택한 항목을 변경할 수 있습니다.
- 선택한 색인을 증가시킵니다. 또는
- 콜렉션보기 원본 이동 사용 이전/다음