使用listView.ScrollIntoView(item) 想讓滾動條自動導航到這個item,但如果在單線程中處理這個有時會失靈,就是你明明調用了,但是滾動條沒任何反應。
問題類似這裡提到的http://social.msdn.microsoft.com/Forums/en/wpf/thread/1223c316-c7e2-48ce-a05a-3cd6fa502036
解決辦法是讓另外一個線程去處理:
1. 聲明一個委托
delegate void SetSelectedItemDelegate(ListViewItem item);
2. 定義一個方法給委托調用
private void SetSelectedItemInBackground(ListViewItem item)
{
if (item.Parent is ListView)
{
ListView listView = item.Parent as ListView;
listView.SelectedItem = item;
listView.ScrollIntoView(item);
}
}
3. 在相關的事件中執行個體化并在新的線程中調用委托:
SetSelectedItemDelegate selectDelegate = new SetSelectedItemDelegate(SetSelectedItemInBackground);
listView.Dispatcher.BeginInvoke(selectDelegate, DispatcherPriority.Background, sourceListView.Items[0]);