2009-03-17 12 views
3

カスタムPanelをItemsHostとして使用するカスタムListBoxがあります。マウスホイールの入力を制御したいので、ホイールを回すと選択した1つのアイテムが変更されます。WPF:ListBoxまたはPanelはマウスホイールの操作に責任を負いますか?

私は、これを行う最善の方法は、OnPreviewMouseWheelイベントを処理することだと考えています(これは、水平ホイールデータを提供しないので、これだけです)。

大きな質問:OnPreviewMouseWheelをどこで処理するのがベストプラクティスですか? ListBox(デフォルトでPanelの子要素の配置についてのヒントはありません)またはPanel(デフォルトでは、その子要素の「IsSelected」プロパティについてのヒントはありません)?

答えて

0

私はListBoxからこれを行うべきだと思います。 ListBoxは、Selectorから継承しています。これは、選択に関連するすべてを処理します。

マウスホイールの選択動作が(それも標準ListBox最初を使用してそれを実装するためには良い考えかもしれません)Panelのいずれかの種類に適用することができ、あなたはListBox選択ロジックの外のどこかPanelを使用する場合があります意味をなさないでしょう。

0

リストボックスからは、現在選択されているアイテムが分かっているので、これを行う必要があります。パネルは、それが選択されているかどうかを知りたくない、または知る必要がない。

これは、この機能を複数回再利用できるように、添付の動作として実装することをお勧めします。

これを行うには
- MouseWheelChangesSelection(true/false)という添付プロパティを持つ新しいクラス(ListBoxSelectorとも呼ばれる)を作成します。
- PropertyNotifyChangedEventを追加し、プロパティが変更されたときにPreviewMouseWheel/MouseWheelイベントのイベントリスナーを登録します。

次のいずれかで現在選択されている項目を変更できます。
- 選択したインデックスをインクリメントします。または
- コレクションビューのソースの移動を使用して前へ/次へ

関連する問題