リストボックスをリストビューに変更することを強くお勧めします。 Why?
ListViewはListBoxから継承されているため、ListBoxのすべての機能をListViewでも使用できます。
のWindows 8.1の場合と
上記なぜ私が推薦しますか? ListViewにはListViewPersistenceHelperがあるので、ListViewの相対スクロール位置を保存および取得するのに役立ちます。
はListViewPersistenceHelper
を実装し、あなたの選択のために、あなたがApp.xamlでグローバル変数を作成する方法のため、このExampleを参照してください。
public int ListViewScrollSelectedIndex;
ListViewのSelectedIndexを保存します。 ListViewを再作成するときは、
ListView.SelectedIndex = ListViewScrollSelectedIndex;
のように設定できます。これは両方の問題を処理する必要があります。 WPFについては
あなたは、リストボックスの現在のスクロール位置を取得したい場合は、まずそのスクロールビューアへのアクセスを獲得する必要があります。
スクロールビューアを取得するコードは次のとおりです。
private ScrollViewer GetObjectScrollViewer(DependencyObject dependencyObject)
{
if (dependencyObject is ScrollViewer)
return dependencyObject as ScrollViewer;
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(dependencyObject); i++)
{
var _scrollViewer = GetObjectScrollViewer(VisualTreeHelper.GetChild(dependencyObject, i));
if (_scrollViewer != null) return _scrollViewer;
}
return null;
}
ScrollViewerのはあなたのScrollViewerのの垂直位置を与えるVerticalOffsetを持っています。 ListBoxをディポピュレートしているときに、App.xamlで作成された変数にその変数を二重に保存します。
var _ListBoxScrollViewer = GetObjectScrollViewer(MyListBox);
ScrollPosition = _ListBoxScrollViewer.VerticalOffset;
あなたは再びそれを移入するとき、それは戻って同じ位置に行くことができるように、今、ScrollViewerののScrollToVerticalOffsetを割り当てます。
var _ListBoxScrollViewer = GetObjectScrollViewer(ListBox);
if (_ListBoxScrollViewer != null) _ListBoxScrollViewer.ScrollToVerticalOffset(ScrollPosition);
希望がこれに役立ちます。
出典
2016-07-27 16:43:34
AVK
私はWPFを使用しており、あなたのリンクはWindows Apps(Windows 8および10)のようです。私は正しい? – Drarig29
ああ、私は参照してください。私はリストボックス自体のために私の答えを編集しています。 – AVK
@ Drarig29これは役に立ちましたか?あるいは、質問に関係する情報が必要ですか? – AVK