尝试在呈现页面后执行某些操作而不仅仅是在wpf中加载

时间:2015-11-06 01:16:59

标签: c# wpf

我试图在wpf页面(不是窗口)上获取UI元素的x,y位置。为了确保完成页面的呈现,我将PointToScreen的撤销放在Loaded监听器中。但是我得到了这个运行时异常:

此Visual未连接到PresentationSource。

void Page_Loaded(object sender, RoutedEventArgs e)
        {
        .....
         Point position = button1.PointToScreen(new Point(0d, 0d));
        }

请让我知道该怎么办?或者你能举例说明我如何运行调度程序吗?

1 个答案:

答案 0 :(得分:0)

没有内置或官方的方法来做到这一点。但是,您可以使用Dispatcher类作为解决方法:

 private void OnWindowLoaded(object sender, RoutedEventArgs e)
 {
     Dispatcher.BeginInvoke(new Action(() => YOUR_THING_HERE), DispatcherPriority.ContextIdle, null);
 }

调度程序将在几乎所有其他操作完成后运行(包括渲染)

我自己也有类似的问题,所以这个答案是基于this博客文章为我解决的。

编辑:我其实错了

有一个ContentRendered事件可以达到此目的。