WPF中调用了TransformToAncestor以后,用Canvas.SetTop来设定位置遇到问题

mars_bolt 2011-11-01 02:26:06
在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的位置,但是不行似乎发生了旋转以外的尺寸变化,导致坐标也不正确。也请高手指点。
...全文
279 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
mad马达 2011-11-24
  • 打赏
  • 举报
回复
can1.Children.Add(rect);
Canvas.SetLeft(rect, itmTransformedRect.X);
Canvas.SetTop(rect, itmTransformedRect.Y);

Canvas.SetLeft(re, itmTransformedRect.X + 1);
Canvas.SetTop(re, itmTransformedRect.Y + 1);
can1.Children.Add(re);
顺序貌似不一样,先设定位置还是先添加控件,是否有影响呢
mars_bolt 2011-11-02
  • 打赏
  • 举报
回复
哎,这里好冷清啊。难道没人用过。!!!看来csdn的人气真不行啦。

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧