2012-10-15 4 views
0

UIElement의의 클립을 변환. 이 예는 나에게 클립을 제공 있지만이 UIElement에서 변환 포함되지 않습니다내가 어떤이는 <code>UIElement</code>에서 수행 된 변환이 포함 된 <code>UIElement</code>의 클립을 좀하고 싶습니다 Windows Phone 용 7</p> <p>을 C#을, 실버 라이트, 비주얼 스튜디오를 사용하고

: 나는 시도

// 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의 원본 변형 된 클립을 얻도록 도와주세요.

미리 감사드립니다.

답변

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)에 관해 제가 게시 한 또 다른 질문과 관련이 있습니다.