2013-06-12 35 views
1

我似乎無法弄清楚,因爲我似乎無法將ListView的項目轉換爲ListViewItem類型並調用ListViewItem.Focus()。下面將不起作用,因爲ListView的項目類型的LogRecord的:如何讓我的ListView專注於特定項目?

((ListViewItem)listView.Items[0]).Focus(); 

編輯:我想滾動條說移動到該項目,基本上,或更好的,該項目在列表中變得可見用戶看到的項目。

關於如何讓我的ListView專注於特定項目的任何想法?現在它綁定到一個集合。下面是我如何設置我的ListView對象:

listView = new ListView(); 
Grid.SetRow(listView, 1); 
grid.Children.Add(listView); 
GridView myGridView = new GridView(); 
// Skipping some code here to set up the GridView columns and such. 
listView.View = myGridView; 
Binding myBinding = new Binding(); 
myBinding.Source = PaneDataContext.LogsWrapper; 
listView.SetBinding(ItemsControl.ItemsSourceProperty, myBinding); 

我綁定到該數據類型(包含的LogRecord之類的東西LogRecord.Message對應於消息列在網格視圖等;代碼工作):

 public class LogRecordWrapper : IEnumerable<LogRecord>, INotifyCollectionChanged 
     { 
      public List<LogRecord> RowList { get; set; } 

      public event NotifyCollectionChangedEventHandler CollectionChanged; 

      public LogRecordWrapper() 
      { 
       RowList = new List<LogRecord>(); 
      } 

      protected virtual void OnCollectionChanged(NotifyCollectionChangedEventArgs e) 
      { 
       if (CollectionChanged != null) 
       { 
        CollectionChanged(this, e); 
       } 
      } 

      public void SignalReset() 
      { 
       OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset, null)); 
      } 

      public void Add(LogRecord item) 
      { 
       RowList.Add(item); 
       OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item)); 
      } 

      public IEnumerator<LogRecord> GetEnumerator() 
      { 
       return RowList.GetEnumerator(); 
      } 

      System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() 
      { 
       return GetEnumerator(); 
      } 
     } 
+2

ListView.ScrollIntoView http://msdn.microsoft.com/en-us/library/system.windows.controls .listbox.scrollintoview.aspx – Paparazzi

+0

@Blam - 非常感謝。救了我。請將此解決方案作爲答案發布,以便我可以接受。 – Alexandru

+0

@Blam - 如果ScrollView目前不是焦點元素的一部分?這似乎並不實際執行此操作,除非滾動視圖是重點元素的一部分。有什麼辦法可以解決這個問題嗎? – Alexandru

回答

1

ListView.ScrollIntoView

ListBox.ScrollIntoView Method

該鏈接說的是ListBox,但它也適用於ListView也

至於沒有與Focus一起工作請發表您如何使用ScrollIntoView。

+0

我正在使用Telerik的RadPane控件。它的對接工具就像你在Visual Studio中擁有對接和窗格一樣。我將我的listView添加到RadPane中,並且ScrollIntoView將在RadPanes上可見,但對於選項卡上的RadPanes不會起作用,奇怪。 – Alexandru

+0

我知道肯定它調用的方法與正確的項目,但是當RadPane選項卡,不可見或固定和不可見,它只是不會滾動到視圖中... – Alexandru

+0

我找到了一種方法來解決它通過將窗格設置爲布爾值來表示它是否需要同步到某個記錄,然後連接到活動窗格更改事件處理程序。 – Alexandru

0

你可以使用:

listView.Items[0].Focused = true; 

...或者是:

listVIew.Items[0].Selected = true; 

(我還不能肯定是什麼樣的 「焦點」 你以後)

然後用結合(或地方使用):

listView.Items[0].EnsureVisible(); 
+0

我希望滾動條移動到項目所在的位置,基本上或更好地說,項目在用戶看到的項目列表中可見。 – Alexandru

+0

但是... listView.Items [0]沒有聚焦或選擇或EnsureVisible,因爲它們不是ListViewItem類型,因爲數據綁定到我的LogRecord集合。 – Alexandru

+0

我最初的問題是數據綁定到不是ListViewItem類型的集合的情況,所以現在如何確保項目可見? – Alexandru

0

這太神奇了! 05-29-2002,04:53 PM#1 Jim Guest ListView EnsureVisible無法正常工作。有任何想法嗎? 代碼...實際上找到並突出顯示選定的項目,它只是不滾動 並使其可見。用戶被迫滾動到該項目。

2004年4月4日,上午12時07 luchmun 嗨, 窗體上的工作......一切順利,但問題是,即使我使用lstitem.ensurevisible與listitem.selected = TRUE當前條目不會變得可見。

11年過去了,它仍然不起作用,沒有人,連微軟似乎都不知道爲什麼? 對我有用的答案是listview1.ensurevisible(itemindex)NOT listview.items(itemindex).ensurevisible

相關問題