3

カスタム Panel を ItemsHost として使用するカスタム ListBox があります。ホイールを回すと、選択した単一の項目が変更されるように、マウス ホイールの入力を制御したいと考えています。

これを行う最善の方法は、OnPreviewMouseWheel イベントを処理することだと思います (ただし、これは水平ホイール データを提供しないため、必要なものしかありません)。

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

4

2 に答える 2

0

現在選択されている項目を認識しているだけなので、ListBox から実行する必要があります。パネルは、選択したかどうかを知りたくない、または知る必要はありません。

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

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

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

于 2009-04-01T11:58:26.643 に答える
0

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

マウスホイールの選択動作はあらゆる種類のものに適用でき(最初Panelに標準を使用して実装することをお勧めします)、選択ロジックが意味をなさないa 以外の場所を使用することをお勧めします。ListBoxPanelListBox

于 2009-03-17T15:45:30.040 に答える