试图在页面呈现后执行某些内容,而不仅仅是加载到wpf中

本文关键字:不仅仅是 加载 wpf 执行 | 更新日期: 2023-09-27 18:20:57

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

此Visual未连接到PresentationSource。

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

请告诉我该怎么办?或者,您可以提供一个如何运行调度器的例子吗?

试图在页面呈现后执行某些内容,而不仅仅是加载到wpf中

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

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

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

我自己也遇到过类似的问题,所以这个答案是基于这篇为我解决问题的博客文章

编辑:我实际上错了

有一个ContentRendered事件可用于此目的。