programing

wpf에서 창 내 요소의 절대 위치를 가져옵니다.

oldcodes 2023. 4. 9. 22:22
반응형

wpf에서 창 내 요소의 절대 위치를 가져옵니다.

요소를 더블 클릭 했을 때 윈도우/루트 요소에 대한 절대 위치를 얻고 싶습니다.원소의 부모 내에서의 상대적인 위치만이 내가 할 수 있는 전부이며, 내가 하려고 하는 것은 창문에 대한 상대적인 포인트이다.화면에서 요소의 포인트를 얻는 방법에 대한 해결책을 봤지만 창에서는 보지 못했습니다.

BrandonS가 원하는 것은 루트 요소에 대한 마우스의 위치가 아니라 어떤 하위 요소의 위치라고 생각합니다.

이를 위해 TransformToAncestor 메서드가 있습니다.

Point relativePoint = myVisual.TransformToAncestor(rootVisual)
                              .Transform(new Point(0, 0));

어디에myVisual이원소라는 걸 알 수 있습니다.rootVisual응용 프로그램입니다.현재의.메인 윈도 또는 상대적인 위치에 원하는 모든 것.

창 내에서 UI 요소의 절대 위치를 가져오려면 다음을 사용할 수 있습니다.

Point position = desiredElement.PointToScreen(new Point(0d, 0d));

사용자 컨트롤 내에 있고 해당 컨트롤 내에서 UI 요소의 상대적인 위치를 원할 경우 다음을 사용하십시오.

Point position = desiredElement.PointToScreen(new Point(0d, 0d)),
controlPosition = this.PointToScreen(new Point(0d, 0d));

position.X -= controlPosition.X;
position.Y -= controlPosition.Y;

스태틱 클래스에 다음 메서드를 추가합니다.

 public static Rect GetAbsolutePlacement(this FrameworkElement element, bool relativeToScreen = false)
    {
        var absolutePos = element.PointToScreen(new System.Windows.Point(0, 0));
        if (relativeToScreen)
        {
            return new Rect(absolutePos.X, absolutePos.Y, element.ActualWidth, element.ActualHeight);
        }
        var posMW = Application.Current.MainWindow.PointToScreen(new System.Windows.Point(0, 0));
        absolutePos = new System.Windows.Point(absolutePos.X - posMW.X, absolutePos.Y - posMW.Y);
        return new Rect(absolutePos.X, absolutePos.Y, element.ActualWidth, element.ActualHeight);
    }

세트relativeToScreen에 매개하는.true전체 화면의 왼쪽 상단 모서리에서 또는 로 배치하기 위해false응용 프로그램 창의 왼쪽 상단 모서리에서 배치합니다.

.NET 3.0 이후로는 단순히*yourElement*.TranslatePoint(new Point(0, 0), *theContainerOfYourChoice*).

이렇게 하면 버튼의 포인트 0, 0을 얻을 수 있지만 컨테이너 쪽으로 향합니다.(다른 포인트 0, 0을 지정할 수도 있습니다)

여기서 문서를 확인하세요.

childObj.MouseDown += (object sender, MouseButtonEventArgs e) =>
{
    Vector parent = (Vector)e.GetPosition(parentObj);
    Vector child = (Vector)e.GetPosition(childObj); // sender
    Point childPosition = (Point)(parent - child);
};

흠. 클릭한 창을 지정해야 합니다.Mouse.GetPosition(IInputElement relativeTo)다음 코드는 나에게 잘 어울린다.

protected override void OnMouseDown(MouseButtonEventArgs e)
    {
        base.OnMouseDown(e);
        Point p = e.GetPosition(this);
    }

자신의 클래스가 아닌 어플리케이션의 다른 포인트에서 창을 참조할 필요가 있다고 생각합니다.이 경우Application.Current.MainWindow도움이 될 거야

언급URL : https://stackoverflow.com/questions/386731/get-absolute-position-of-element-within-the-window-in-wpf

반응형