2010-12-20 7 views
13

Microsoft 리사이즈 Adorner 예제를 확장하고 있으며, 왼쪽 아래 드래그 핸들을 드래그했다고 말한 후에 요소의 위치를 ​​변경할 수 있어야합니다.WPF UIElement의 왼쪽 위 좌표 가져 오기

그래서 너비가 150 인 텍스트 상자가 있고 양식에 높이가 35 개 있고 왼쪽 아래의 드래그 핸들이 너비를 200 너비로 변경하면 텍스트 상자의 오른쪽은 변경되지 않지만 왼쪽 가장자리는 움직입니다. 왼쪽으로.

그래서 UIElement의 왼쪽 위 좌표를 알아야합니다. Canvas.GetLeft 및 Canvas.GetTop을 시도했지만 혼란스러운 NaN을 반환합니다.

오프셋을 반환하는 VisualTreeHelper.GetOffset을 시도했지만 오프셋 요소의 값이 너무 높아서 요소의 정렬 방법에서 사용하려고하면 아마도 사용하지 않게됩니다.

Wpf 이전의 좌표계는 매우 단순했습니다. wpf는 내가 생각하는 것보다 과장되어 있습니다.

답변

8

UIElement의 좌표를 상위로 변환 할 수 있습니다. 귀하의 경우 그것은 양식입니다. 누군가가 단지 원하는 경우

private Point GetPosition(Visual element) { 
    var positionTransform = element.TransformToAncestor(MyForm); 
    var areaPosition = positionTransform.Transform(new Point(0, 0)); 

    return areaPosition; 
} 
21

그리고 컨트롤의 화면이 좌표 : 여기에 시각의 좌표를 반환하는 방법의 예입니다

Point targetLoc = targetCtrl.PointToScreen(new Point(0, 0)); 

(이 스레드의 설명과 일치하지 않습니다가, 검색 결과에서 사람들이 들어오는 것을 도울 수 있다고 생각합니다.)

+0

정확히 내가 뭘 찾고 있었습니까 !! – Shefali

+1

이 답변을 얻으려면 (제목 때문에)이 게시물에 Google에서 왔습니다. 고맙습니다! – StinkyCat

관련 문제