2010-06-24 7 views
1

현재 특정 X 좌표, Y 좌표를 가진 항목이 포함되어 있으며 해당 점의 범위를 제한하는 사용자 정의 컨트롤이 있습니다. 이 경우 이러한 위치는 0> X> 40이고 0> Y> 80 (40x80)입니다. 해당 항목을 호스팅하는 컨트롤은 동적이지만 윈도우 크기에 따라 특정 종횡비가 있습니다. X & Y 좌표를 사용자 정의 컨트롤 내의 상대 위치로 변환해야합니다. 어떤 도움이라도 대단히 감사합니다! 미리 감사드립니다! 중요한/도움이된다면 Silverlight를 사용하고 있습니다.X 좌표, Y 좌표 변환

답변

4

GeneralTransform을 사용하여 컨테이너를 기준으로 UIElement의 위치를 ​​확인할 수 있습니다. 여기에 코드 조각입니다 :

/// <summary> 
    /// Gets the position of the specified element's top left corner, relative to the specified container. 
    /// </summary> 
    /// <param name="element"></param> 
    /// <param name="container"></param> 
    public static Point GetPosition(UIElement element, UIElement container) 
    { 
     if (element == null) 
      throw new ArgumentNullException("element"); 
     if (container == null) 
      throw new ArgumentNullException("container"); 
     var gt = element.TransformToVisual(container); 
     var position = gt.Transform(new Point(0, 0)); 
     return position; 
    } 

환호, 알렉스는 null 사실

[편집] 확인 "컨테이너"불필요 - TransformToVisual 또한 매개 변수로 널 받아 들일 것입니다. 또 다른 문제 : TransformToVisual은 ArgumentException을 throw합니다. "element"가 보이지 않거나 시각적 트리 등에 현재 없습니다. 불행히도 "element"에서 실제로 호출하기 전에 TransformToVisual이 해당 예외를 throw할지 여부를 결정하는 방법을 찾을 수 없습니다. 그래서 간단히 try-catch 블록에서 TransformToVisual에 대한 호출을 감싸고 ArgumentException을 삼켰습니다. 어쨌든 IMHO에서는 아무 쓸모가 없기 때문입니다.

관련 문제