另一个问题中儿童真正的“逻辑”的位置在我的WPF问题系列:)WPF:获取其父面板
我创建定制Decorator
将被用来装饰Panel
秒(或者也可以是行为,没有区别)。
那Decorator
处理的是Panel
(Children
Panel
的属性)中的元素。它附加了一些RenderTransform
到这些元素。现在我需要一个相对于Panel
本身的元素(Panel
的'孩子')的位置。换句话说,如果Panel
的坐标空间中有某个子元素,我需要一个位置。换句话说,我希望在Children
上调用Arrange
方法时的ArrangeOverride
方法指定的偏移量。
这似乎很容易。但我找不到总是得到坐标坐标的方法。
此代码
VisualTreeHelper.GetOffset(child)
当面板里面ScrollView
不工作 - 它采用Panel
的最顶端,最左边可见的角落为坐标空间的原点 - 而不是Panel
真正的最上面和最左边的角落。
的代码时,一些渲染转换已经是Panel
的子元素上的活动
Point position = child.TransformToAncestor(panel).Transform(new Point(0,0));
将无法正常工作。它将返回子元素的变换图像的位置(通过渲染转换)。渲染位置。
同样的问题是这种形式给出:
Point panelPosition = panel.PointToScreen(new Point(0, 0));
Point childPosition = child.PointToScreen(new Point(0, 0));
Point position = new Point(childPosition.X - panelPosition.X, childsPosition.Y - panelPosition.Y);
所以这个我什么我已经tryied,但没有奏效。我在这个主题上有两个类似的问题,试图简化问题,所以我得到了上面的一些建议。现在我介绍了这个问题的全部复杂性,我希望能得到正确的建议。
如果有什么不清楚的地方,请留下评论。 谢谢
如果使用画布面板,您可以拨打Canvas.GetTop和Canvas.GetLeft确定在2D平面的顶部和左侧坐标。 – whoisthis 2011-01-22 18:10:35
谢谢。但我不知道我的`Panel`是什么类型。它给了我,'装饰者'应该能够装饰任何'面板'。 – drasto 2011-01-22 18:23:36