0

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を台無しにすることなく、元の変換でクリップを取得するのを手伝ってください。UIElement

前もって感謝します。

4

1 に答える 1

0

元の をいじらずにこれを解決する方法を見つけましたUIElementGeometry元の を使用するのではなく、同じデータで新しいオブジェクトを作成する必要がありました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 のいくつかの制限を確認することを述べました。これは、私がクリップについて投稿した別の質問 (こちら) に関連しています。

于 2012-10-29T14:16:23.037 に答える