Ras*_*sto 5 .net c# wpf custom-controls wpf-controls
我的WPF问题系列中的另一个问题:)
我正在创建Decorator将用于装饰Panels的自定义(或者它可以是行为,没有区别).
这Decorator涉及那个Panel(Children属性)中的元素Panel.它将一些RenderTransform内容附加到这些元素上.现在我需要一个Panel相对于它Panel自身的元素('child' )的位置.换句话说,如果Panels坐标空间中有一些子元素,我需要一个位置.换句话说,我想要通过when调用方法的ArrangeOverride方法指定的偏移量.PanelArrangeChildren
这似乎很容易.但我无法找到始终获得正确坐标的方法.
这段代码
VisualTreeHelper.GetOffset(child)
Run Code Online (Sandbox Code Playgroud)
当面板在里面时ScrollView它不起作用- 它Panel作为坐标空间的原点 - 而不是真正的最顶端和最左边的角落 - 位于最顶部,最左边的可见角落Panel.
代码
Point position = child.TransformToAncestor(panel).Transform(new Point(0,0));
Run Code Online (Sandbox Code Playgroud)
当某些渲染变换在子元素上已经激活时,它将不起作用Panel.它将返回子元素的变换图像的位置(通过渲染变换).渲染位置.
同样的问题是这个问题:
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);
Run Code Online (Sandbox Code Playgroud)
所以这就是我所尝试的但是它没有用.我有两个关于这个主题的类似问题,它们正在努力简化问题,所以我得到了一些上面的建议.现在我以完全复杂的方式介绍了这个问题,我希望得到正确的建议.
如果不清楚,请留下评论.谢谢
您可以在RenderTransform调用之前“撤消” TransformToAncestor:
Point origin = child.RenderTransform.Inverse.Transform(new Point(0, 0));
Point position = child.TransformToAncestor(listBox).Transform(origin);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3172 次 |
| 最近记录: |