c# - 使用 PointToScreen 在 wpf 中查找控件的位置

标签 c# wpf point

我试图在主窗口中找到用户控件的相对坐标。我尝试使用“Control.PointToScreen()”方法但没有成功。每次我这样做时,我都会得到一个异常:

System.InvalidOperationException:此视觉对象未连接到 PresentationSource

我认为这与我在视觉效果正确呈现之前调用 pointToScreen 有关,因为我已经在我的 Mains Constructor 中调用该方法。

无论如何,我想听听你们中是否有人有提示/解决方案/想法我可以如何解决这个问题。

只是为了弄清楚我要做什么,我的控件包含一个照片控件,我需要它在我的主控件内的确切位置,因为我想使用这些坐标在上面创建控件的副本它

使用 PointToScreen 进行试验。

最佳答案

在您的代码中注册 UserControl 的 Loaded 事件。 这应该可以修复当您尝试获取位置时视觉效果尚未呈现的错误。

YourControl.Loaded += ControlLoaded;

public void ControlLoaded(object sender, EventArgs e){
    Console.WriteLine(YourControl.PointToScreen(new Point(0,0));
}

编辑

既然你想要你的控件相对于你的窗口的位置,最好试试那个。

YourControl.TransformToAncestor(YourWindow).Transform(new Point(0,0))

关于c# - 使用 PointToScreen 在 wpf 中查找控件的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24802945/

相关文章:

c# - 如何在xml中返回GetResponseStream?

c# - 我可以直接 "Extract"列表 <> 中的项目吗?

wpf - 如何将WPF窗口置于最前面?

c# - 在 DataTemplate 内的 ListView 上添加 EventTrigger 导致 XamlParseException

android - 如何动画到以 map 为中心的其他位置

python - 如何在 matplotlib 中以毫米为单位设置轴尺寸和位置?

mysql - 使用 node.js 在 mysql 中插入几何值

c# - 我的 url 编码有什么问题?

命名空间 "clr-namespace"中不存在 WPF <class>

c# - 如何从 List<string> 中删除所有非字母数字单词