2008-09-30 7 views
0

실버 라이트 베타 2 앱을 RC0으로 업그레이드하고 포인트를 자식 요소에서 부모로 변환하는 기능이 있습니다. 이 함수의 목적은 동일한 캔버스에 있지 않고 부모를 공유하지 않아도 요소가 요소 위에 정확하게 표시되도록하는 것입니다. 그것은 기존 및 신규 부모의 위치를 ​​얻기 위해 MouseEventArgs.GetPosition 기능에 의존'TranslatePosition'을 Silverlight 베타 2에서 RC로 업데이트하는 가장 좋은 방법은 무엇입니까?

protected Point TranslatePosition(Point current, Panel from, Panel to, MouseEventArgs e) 
    { 
     Point rtn = new Point(-1, -1); 
     // get point relative to existing parent 
     Point fromPoint = e.GetPosition(from); 
     // get point relative to new parent 
     Point toPoint = e.GetPosition(to); 

     // calculate delta 
     double deltaX = fromPoint.X - toPoint.X; 
     double deltaY = fromPoint.Y - toPoint.Y; 

     // calculate new position 
     rtn = new Point(current.X - deltaX, current.Y - deltaY); 

     return rtn; 
    } 

주의 사항 :

다음은 현재 기능입니다. 사용할 수있는 MouseEventArgs가없는 경우 우리는 새 인스턴스를 만들고이를 전달합니다. 이는 해킹 이었지만 작동하는 것처럼 보였습니다. 이제 RC0에서는 MouseEventArgs 생성자가 내부이므로이 해킹이 더 이상 작동하지 않습니다.

MouseEventArgs.GetPosition에 의존하지 않는 RC0의 포인트 변환 방법을 작성하는 방법에 대한 아이디어가 있습니까?

답변

2

프레임 워크 요소의 TransformToVisual 메서드를 참조하십시오. 그것은 당신이 원하는 것을 정확히 수행합니다 : 다른 컨트롤이 주어지면 현재 컨트롤을 기준으로 한 점의 좌표를 전달 된 컨트롤과 관련된 좌표로 매핑하는 새로운 변환을 생성합니다.

var transform = from.TransformToVisual(to); 
return transform.Transform(current); 
+0

환상적인 산티아고! 이것은 완벽 해! –

0

그러나 ... 렌더링 변환 파이프 라인이 WPF에서 작동하는 방식과 다른 업데이트를 받아들이는 방법에 문제가있는 것으로 보입니다.

daisley-harrison.com에 위키 항목을 작성한 후 이에 대해 이야기합니다. 나중에 블로그에 들어가면 blog.daisley-harrison.com으로 바꿀 것입니다.

관련 문제