WPF の ListView で選択項目を中央にしたスクロール制御

ListView で選択された項目をコントロールの中央に表示したいと思うことがあります。今回はこれを実現するべく実装を考えてみました。考え方としては ListView が持っている ScrollViewer を制御して、スクロールを制御することにしました。

結果

実装した結果を示します。作成したアプリの動きとしては次のようになっています。

  • 選択状態にあるものを画面外にスクロールさせたとして、”アジャスト”ボタンを押すと、その項目が中央になるように表示
  • 項目の番号を指定して”選択”ボタンを押すと、対象の項目を選択状態にして、その項目が中央になるように表示

実装

まずは ListView の中から ScrollViewer のコントロールを扱うためのヘルパ関数を準備します。以下のような VisualTreeHelperExtensions を作成しました。

これを用いて、 ListView のコントロールから ScrollViewer を得ます。ここで listView は ListView コントロールにつけてある名前です。

この scrollViewer の ScrollToVerticalOffset メソッドを呼び出してスクロールさせたいのですが、どのくらいスクロールが必要なのかを、 ListView の選択項目のインデックス値から求めることにします。
以下のようなコードになりましたが、エラーハンドリングは省略しているのでご注意ください。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする