WPF中调用了TransformToAncestor以后,用Canvas.SetTop来设定位置遇到问题
在TransformToAncestor调用前。用transform render了size和角度。之后通过GeneralTransform来当前取得坐标。
获取坐标和当前的尺寸都是没有问题的。这时候设置一个矩形覆盖原控件。如果这个矩形是在函数内创建的就没有问题。如果不是。是window的成员的话。设定的位置就会还原到控件之前的位置。似乎成员矩形在TransformToAncestor调用时,受到了影响,要不就是canvas发生了偏移。这里很不明白。高手指点一下吧。
GeneralTransform tranform = CurItm.item.TransformToAncestor(can1);
Point leftTop = tranform.Transform(new Point(0, 0));
Rect itmTransformedRect = tranform.TransformBounds(new Rect(new Point(0, 0), new Point(item.ActualWidth, item.ActualHeight)));
rect.Height = itmTransformedRect.Height;
rect.Width = itmTransformedRect.Width;
if (rect.Parent == null)
can1.Children.Add(rect);
Canvas.SetLeft(rect, itmTransformedRect.X);
Canvas.SetTop(rect, itmTransformedRect.Y);
Rectangle re = new Rectangle();
re.Fill = Brushes.Blue;
re.Height = itmTransformedRect.Height;
re.Width = itmTransformedRect.Width;
Canvas.SetLeft(re, itmTransformedRect.X + 1);
Canvas.SetTop(re, itmTransformedRect.Y + 1);
can1.Children.Add(re);
上面的代码rect是window的矩形成员。re是函数内创建的矩形。同样的坐标进行设定结果确不同。高手请指点。
或者是能够计算出当前的偏移然后对rect进行设定让他出现在该出现的位置。
我尝试,用itmTransformedRect来再次转换。结果和预想的不同。
代码如下
Rect rec1 = tranform.TransformBounds(itmTransformedRect);
然后用rec1的X,Y来设定rect的位置,但是不行似乎发生了旋转以外的尺寸变化,导致坐标也不正确。也请高手指点。