我的WPF问题系列中的另一个问题:)
我正在创建用于装饰Decorator
的自定义Panel
(或者它可以是行为,没有区别)。
Decorator
处理Panel
(Children
的{{1}}属性中的元素。它将一些Panel
附加到这些元素上。现在我需要一个相对于RenderTransform
本身的元素(Panel
的'子')的位置。换句话说,如果Panel
坐标空间中有一些子元素,我需要一个位置。换句话说,我想在Panel
上调用ArrangeOverride
方法时Panel
Arrange
方法指定的偏移量。
这似乎很容易。但我无法找到始终获得正确坐标的方法。
此代码
Children
当面板位于VisualTreeHelper.GetOffset(child)
内时,不起作用 - 它将ScrollView
的最顶部,最左侧可见角作为坐标空间的原点 - 而不是{{1}的真实最顶端和最左侧角落}}
代码
Panel
当Panel
的子元素上的某些渲染变换已经处于活动状态时,将无效。它将返回子元素的变换图像的位置(通过渲染变换)。渲染位置。
同样的问题是这个问题:
Point position = child.TransformToAncestor(panel).Transform(new Point(0,0));
所以这就是我所尝试的但是它没有用。我有两个关于这个主题的类似问题,它们正在努力简化问题,所以我得到了一些上面的建议。现在我以完全复杂的方式介绍了这个问题,我希望得到正确的建议。
如果不清楚,请留下评论。 谢谢
答案 0 :(得分:0)
您可以在致电RenderTransform
之前“撤消”TransformToAncestor
:
Point origin = child.RenderTransform.Inverse.Transform(new Point(0, 0));
Point position = child.TransformToAncestor(listBox).Transform(origin);