【发布时间】:2009-05-25 11:39:35
【问题描述】:
在回答之前,这个问题并不像您阅读标题时所想的那么简单。
我有一个 ItemsControl,它绑定到 T 的 ObservableCollection,并且数据被描述为 DataTemplate。到目前为止,这是一个经典案例。
当我添加一个新元素时,我需要知道正在渲染的元素在窗口内的确切坐标和位置。
我意识到 Collection 需要一段时间才能引发事件,并且 WPF 需要使用他的所有布局机制来实际定位元素。
我希望在完成后收到通知并获取这些位置。 我正在使用这些代码行
UIElement item = list.ItemContainerGenerator.ContainerFromItem(foo) as UIElement;
Point point = TranslatePoint(new Point(0.0, 0.0), Window.GetWindow(item));
现在的问题是,当我点击这些行时,它总是为时过早,如果我“等待”一秒钟并让 wPF 完成,我确实得到了正确的位置。
我正在努力寻找比“等待”UI-Thread 更好的解决方案。 也许你可以帮忙:)
谢谢! 爱丽儿
【问题讨论】:
-
ChrisF,感谢您的编辑。你是如何消除代码部分的滚动的?
标签: c# wpf multithreading