我正在使用C#,Silverlight,Visual Studio for Windows Phone 7。
我想获得一个UIElement
的剪辑,其中包含UIElement
上已完成的任何变换。
此示例为我提供了Clip但不包含UIElement的任何转换:
// uie is a UIElement taken from a PhoneApplicationPage
Geometry myClip = uie.Clip;
我尝试了以下操作,但最终移动了UIElement
:
var frame = Application.Current.RootVisual as PhoneApplicationFrame;
var page = frame.Content as PhoneApplicationPage;
GeneralTransform gt = uie.TransformToVisual(page);
uie.RenderTransform = gt as Transform;
Geometry myClip = uie.Clip;
我还尝试在最后添加一个逆变换以撤消任何移动,但这似乎会使情况变得更糟:
uie.RenderTransform = gt.Inverse as Transform;
请帮助我使用UIElement
的原始变换获取Clip,而不会弄乱UIElement
本身。
提前致谢。
答案 0 :(得分:0)
我想出了如何在不弄乱原始UIElement
的情况下解决这个问题。我需要创建一个具有相同数据的新Geometry
对象,而不是使用原始Geometry
。这不仅将新数据与旧数据分开,还可以防止对象被分配为多个对象的子对象。
以下是我使用的结果代码:
var frame = Application.Current.RootVisual as PhoneApplicationFrame;
var page = frame.Content as PhoneApplicationPage;
GeneralTransform gt = uie.TransformToVisual(page);
var place = gt.Transform(new Point());
// declaring new variables to hold these values
Geometry geom;
Path path = new Path();
// here I checked for other restrictions on my UIElements before assigning the variables
geom = new RectangleGeometry();
(geom as RectangleGeometry).Rect = new Rect(place.X, place.Y, uie.RenderSize.Width, uie.RenderSize.Height);
path.Data = geom;
我提到我在分配变量之前检查了我的UIElements的一些限制。这与我发布的关于剪辑的另一个问题(here)有关。