我在ListView的ItemsSource集合中添加了一条新记录:
Source.Add(newRecord);
在此操作之后,我正在尝试获取相应项目的矩形:
ListViewItem newItem = list.ItemContainerGenerator.ContainerFromItem(newRecord) as ListViewItem;
Rect rc = LayoutInformation.GetLayoutSlot(newItem);
但不幸的是,rc
是(0,0,0,0)。好像当我调用GetLayoutSlot方法时,尚未安排新的ListViewItem。如何在添加新记录后直接获取正确的信息?
任何帮助将不胜感激。
答案 0 :(得分:1)
在list.UpdateLayout();
行之前调用ListViewItem newItem = ...
应该有助于立即获取矩形。
但一般来说,我不建议在WPF程序中的任何地方使用UpdateLayout()
。出于性能原因,WPF中的布局过程是异步的。因此,如果您的程序在稍后的时间点确定列表项的矩形可能会更好。
这就是我的意思"以后的时间点":
Source.Add(newRecord);
Dispatcher.BeginInvoke(DispatcherPriority.Loaded,
new Action(() =>
{
ListViewItem newItem = list.ItemContainerGenerator.ContainerFromItem(newRecord) as ListViewItem;
Rect rc = LayoutInformation.GetLayoutSlot(newItem);
System.Diagnostics.Debug.WriteLine("rc = " + rc);
}));