天天看點

WPF 中listView.ScrollIntoView失效的問題

使用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]);