私はリストビューをサブクラス化する必要がある別の回避策があります。もう少し作業は必要ですが、結果は最初の項目にスクロールするだけではありません。しかし、テンプレート内のScrollViewerが名前(ここではPART_ScrollViewer)を持つように、または別の方法でScrollViewerオブジェクトを取得するようにListViewテンプレートを調整する必要があります。
public class BetterListView : ListView
{
ScrollViewer sv;
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
//Get the scrollviewer in the template (I adapted the ListView template such that the ScrollViewer has a name property)
sv = (this.Template.FindName("PART_ScrollViewer", this)) as ScrollViewer;
}
protected override void OnItemsChanged(NotifyCollectionChangedEventArgs e)
{
base.OnItemsChanged(e);
//Prevent the bug where the ListView doesn't scroll correctly when a lot of items are removed
if (sv != null && e.Action == NotifyCollectionChangedAction.Remove)
{
sv.InvalidateScrollInfo();
}
}
}
これは完全に機能します!データソース/ itemssourceを設定し、最初の行を見つけてスクロールしてください! –
同じ問題がありましたか?私は他の人がこれを見ていた多くの例を見つけることができませんでした。 –