我似乎無法弄清楚,因爲我似乎無法將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();
}
}
ListView.ScrollIntoView http://msdn.microsoft.com/en-us/library/system.windows.controls .listbox.scrollintoview.aspx – Paparazzi
@Blam - 非常感謝。救了我。請將此解決方案作爲答案發布,以便我可以接受。 – Alexandru
@Blam - 如果ScrollView目前不是焦點元素的一部分?這似乎並不實際執行此操作,除非滾動視圖是重點元素的一部分。有什麼辦法可以解決這個問題嗎? – Alexandru