.net - WPF:获取子 UIElement 在其父级中的位置。如果有,请忽略 RenderTransform

标签 .net wpf controls panel rendertransform

假设我有这个 XAML 代码:

<DockPanel Name="pan">
    <Label Content="AAA" Name="lab1" />
    <Label Content="BBB" Name="lab2" />
    <Label Content="CCC" Name="lab3" />
</DockPanel>

我后面的代码我想找出lab2的坐标是多少内pan . 霍威尔我想忽略任何当前的 lab2 RenderTransform | .因此,解决方案必须为上述代码和以下代码返回相同的坐标:
<DockPanel>
    <Label Content="AAA" />
    <Label Content="BBB" >
        <Label.RenderTransform>
            <TranslateTransform Y="20"/>
        </Label.RenderTransform>
    </Label>
    <Label Content="CCC" />
</DockPanel>

换句话说,我想要由 ArrangeOverride 设置的位置pan的方法打电话时Arrangebut2 .我称之为“逻辑位置”。 '视觉位置'可以通过调用以下方法获得:
private Point visualPoss() {
    Point lab2Vis = lab2.PointToScreen(new Point(0, 0));
    Point panVis = pan.PointToScreen(new Point(0, 0));
    return new Point(lab2Vis.X - panVis.X, lab2Vis.Y - panVis.Y);
} 

但这不是我的问题的解决方案,因为此 visualPoss() 的返回值不等于上面的两个 XAML 代码示例。

如果有什么不清楚的,请发表评论。

谢谢

最佳答案

看起来有一个非常简单明了的解决方案:

private Point logicalPoss() {
    Vector vec = VisualTreeHelper.GetOffset(lab2);
    return new Point(vec.X, vec.Y);
}

看起来它运行良好。如果您知道场景何时不起作用,请发表评论。

关于.net - WPF:获取子 UIElement 在其父级中的位置。如果有,请忽略 RenderTransform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4760310/

相关文章:

c# - 使用后台线程显示 "Busy Indicator"

javascript - 获取动态更改的 asp.net 标签的值

WPF:重叠控件和网格列宽度的问题

c# - Int32既然是值类型,为什么要继承.ToString()呢?

c# - 动态更改 log4net 连接字符串

c# - WPF InkCanvas : Draw line with DynamicRenderer

c# - 尝试使用 C# 写入关键字窗口元数据项

c# - Automapper 是否应该与私有(private) setter OOB 一起使用?

c# - 如何从其文件夹外执行 .exe

c# - 如何在服务器端为 C#/ASP.NET 中的图像控件添加单击事件