2010-12-20 20 views
13

Pracuję nad rozszerzeniem przykładu zmiany rozmiaru Microsoft o Adorner i potrzebuję móc zmienić położenie elementu po powiedzeniu, że dolny lewy uchwyt przeciągnięcia został przeciągnięty.Uzyskiwanie górnych lewych współrzędnych pliku WPF UIElement

Więc jeśli mam pole tekstowe, powiedzmy 150 szerokie, 35 wysoko postawionych na moim formularzu, a dolny lewy uchwyt przeciągnięcia zmienia szerokość na 200, prawa ręka pola tekstowego pozostaje niezmieniona, ale ruchy lewej krawędzi są ruchome w lewo.

Muszę znać lewe górne współrzędne UIElement. Próbowałem Canvas.GetLeft i Canvas.GetTop, ale zwracają NaN, co jest mylące.

Właśnie wypróbowałem VisualTreeHelper.GetOffset, który zwraca offset, ale gdy spróbujesz użyć go w metodzie aranżacji elementu, znika, prawdopodobnie, ponieważ wartości w offsecie są zbyt wysokie.

W czasach przed WPF układ współrzędnych był dość prosty, wpf zbytnio skomplikował rzeczy, które myślę.

Odpowiedz

8

Możesz przekształcić współrzędne UIElement na rodzica. W twoim przypadku jest to forma. Oto przykład metody, która zwraca współrzędne wizualny:

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

    return areaPosition; 
} 
21

A jeśli ktoś chce tylko współrzędne ekran kontrolki:

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

(to nie pasuje do opisu tego wątku, ale pasuje do tytułu. Wyobrażam sobie, że może to pomóc osobom przychodzącym poza wyniki wyszukiwania)

+0

Dokładnie tego, czego szukałem !! – Shefali

+1

Przenieś z google do tego wpisu (z powodu tytułu), aby uzyskać tę odpowiedź. Dziękuję Ci! – StinkyCat