获取新添加的ListViewItem的矩形

时间:2014-05-29 15:52:50

标签: wpf listview listviewitem

我在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。如何在添加新记录后直接获取正确的信息?

任何帮助将不胜感激。

1 个答案:

答案 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);
    }));