gpt4 book ai didi

c# - 子窗口定位

转载 作者:行者123 更新时间:2023-12-04 05:41:09 25 4
gpt4 key购买 nike

我知道之前有人问过这个问题( Get Absolute Position of element within the window in wpf ),但我还没有能够正确实现。我正在尝试打开一个相对于父窗口中的控件的子窗口。到目前为止,我有这个;

messageWindow = new Message(true);
Point relativePoint = btn1.TransformToAncestor(this).Transform(new Point(0, 0));
messageWindow.Left = relativePoint.X;
messageWindow.Top = relativePoint.Y;
messageWindow.Show();

现在虽然这确实影响了子窗口的位置( messageWindow ),但它似乎没有将它放在 btn1 上/旁边控制在父级。我遇到的另一个问题是,如果我移动父窗口,则回想此方法已关闭原始 messageWindow窗口的新实例显示在旧位置(即使 btn1 处于新位置)。我觉得这很奇怪,想知道是否有人可以帮我解决这个问题。

更新

感谢 Charleh 解释我只是相对于窗口中的控制位置而不是整个屏幕来设置它们。所以现在是获取父窗口在屏幕上的位置并将其添加到 XY 的问题。我怎么会得到这个?刚刚试过这段代码(虽然我说实话,我不太明白)总线似乎仍然没有非常紧密地跟随。在屏幕上获取窗口位置的好方法是什么?
messageWindow= new Message(true);
Point relativePoint = btn1.TransformToAncestor(this).Transform(new Point(0, 0));
PresentationSource ScreenPos = PresentationSource.FromVisual(this);

messageWindow.Left = relativePoint.X + (96.0 * ScreenPos.CompositionTarget.TransformToDevice.M11);
messageWindow.Top = relativePoint.Y + (96.0 * ScreenPos.CompositionTarget.TransformToDevice.M22);
messageWindow.Show();

最佳答案

relativePoint是控件相对于 Window 的位置,不是屏幕。当设置 LeftRight积分messageWindow (子窗口),点是相对于屏幕,而不是父窗口。

为了获得正确的位置,您需要找到父窗口的位置,然后进行一些数学运算以找到控件相对于屏幕的位置,而不是应该为您提供所需位置的窗口放置子窗口。

关于c# - 子窗口定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11227892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com