Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF:查找元素的位置_C#_Wpf_Multithreading - Fatal编程技术网

C# WPF:查找元素的位置

C# WPF:查找元素的位置,c#,wpf,multithreading,C#,Wpf,Multithreading,在回答之前,这并不像你读标题时想的那么简单 我有一个ItemsControl,它绑定到T的ObservableCollection,数据被描述为DataTemplate。到目前为止,这是一个经典案例 当我添加一个新元素时,我需要知道被渲染元素的确切坐标和窗口内的位置 我意识到集合引发事件需要一段时间,WPF需要使用所有布局机制来实际定位元素 我希望在完成后得到通知并抓取这些位置。 我正在使用这些代码行 UIElement item = list.ItemContainerGenerator.Co

在回答之前,这并不像你读标题时想的那么简单

我有一个ItemsControl,它绑定到T的ObservableCollection,数据被描述为DataTemplate。到目前为止,这是一个经典案例

当我添加一个新元素时,我需要知道被渲染元素的确切坐标和窗口内的位置

我意识到集合引发事件需要一段时间,WPF需要使用所有布局机制来实际定位元素

我希望在完成后得到通知并抓取这些位置。 我正在使用这些代码行

UIElement item = list.ItemContainerGenerator.ContainerFromItem(foo) as UIElement;
Point point = TranslatePoint(new Point(0.0, 0.0), Window.GetWindow(item));
现在的问题是,当我点击这些线时,总是为时过早,如果我“等待”一秒钟,让wPF完成,我确实得到了正确的位置

我试图找到比“等待”UI线程更好的解决方案。 也许你可以帮忙:)

谢谢!
Ariel

可能其中一个会告诉您布局数据何时可用。看起来很有希望。

嗯,我以前试过。在你回答之后,我重新检查了我的代码。我需要多做一些同步的工作,但确实有帮助。谢谢。ChrisF,谢谢你的编辑。您是如何消除代码部分中的滚动的?