質問: 開発環境 VisualStudio 2017 フレームワーク WPF 言語 C# 実現したいこと・現状 2画面(画面A、画面B)ある仕組みです。 画面Aにリストボックスがあり、リストボックスの特定の行選択して、ボタンを押下すると それらに準じた内容の画面Bを表示する仕組みです。 問題は画面Bから画面Aに戻った際に、 画面Aのリストボックス内のフォーカスがリセットされてしまうことです。 (※本来の意味とは違いますが、ここでいうフォーカスというのは、 画面に表示されるリストボックスの初期表示行数という意味です。) 例)画面Aのリストボックスに100行のデータが格納されていて、 100行目にスクロールバーをスライドさせて100行目を選択する。 ↓ 画面Bから画面Aに戻る ↓ 画面Aが表示された時にリストボックス部分のフォーカスが 100行目にいってほしい。 (※現在は先頭行に常にフォーカスがいっている状態です。)
回答: ListBoxはSelectedXXX系のメソッド選択行を変更でき、スクロール位置はScrollIntoViewメソッドで調整できます。 サンプルコード ``` // 80番目の要素を選択状態にして this.listbox.SelectedIndex = 79; // スクロール移動も実施。 this.listbox.ScrollIntoView(this.listbox.Items[79]); ``` ここまでのコードを、例えば画面Aを表示するイベントなどの処理で記載することで処理が実現できます。 処理順序としては、 1他画面(画面B)に遷移した際に、フォーカス位置を記憶しておく。(80行目など) 2画面Aに戻ってきた(開いた際に)に、SelectedXXX系メソッドとScrollIntoViewで初期フォーカス行を調整する。 でしょうか。1の処理がどうなっているか依る部分もありますので、不明点あればご質問くださいませ。