相关疑难解决方法(0)

如何获取子元素相对于父元素的位置?

如果有一个Canvas父级,很容易获得一个孩子的位置:

Canvas.GetLeft/Top (child)
Run Code Online (Sandbox Code Playgroud)

但是,如何才能让其他类型的父母获得孩子的位置?

wpf

41
推荐指数
1
解决办法
3万
查看次数

WPF:获取子UIElement在其父级中的位置.忽略RenderTransform(如果有)

假设我有这个XAML代码:

<DockPanel Name="pan">
    <Label Content="AAA" Name="lab1" />
    <Label Content="BBB" Name="lab2" />
    <Label Content="CCC" Name="lab3" />
</DockPanel>
Run Code Online (Sandbox Code Playgroud)

我在我后面的代码我想找出是什么的坐标lab2范围内pan.Hovewer我想忽略任何现有的RenderTransform lab2.因此,解决方案必须返回上述代码的相同坐标,并遵循:

<DockPanel>
    <Label Content="AAA" />
    <Label Content="BBB" >
        <Label.RenderTransform>
            <TranslateTransform Y="20"/>
        </Label.RenderTransform>
    </Label>
    <Label Content="CCC" />
</DockPanel>
Run Code Online (Sandbox Code Playgroud)

换句话说我想这是在设定的位置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);
} 
Run Code Online (Sandbox Code Playgroud)

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

如果不清楚,请留下评论.

谢谢

.net wpf controls panel rendertransform

4
推荐指数
1
解决办法
7147
查看次数

标签 统计

wpf ×2

.net ×1

controls ×1

panel ×1

rendertransform ×1