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
'programing' 카테고리의 다른 글
텍스트 영역의 크기 조정 가능한 속성을 비활성화하려면 어떻게 해야 합니까? (0) | 2023.04.09 |
---|---|
SQL Server 쿼리에 테이블 구조를 표시하려면 어떻게 해야 합니까? (0) | 2023.04.09 |
node.js를 Windows에서 완전히 삭제하는 방법 (0) | 2023.04.09 |
Swift 컴파일 시간이 왜 이렇게 느리죠? (0) | 2023.04.09 |
특정 열별 VBA Excel 정렬 범위 (0) | 2023.04.09 |