😸
AvaloniaUI Control座標の取得方法
やりたいこと
AvaloniaUIの各Controlの座標をC#コードで取得したい。
使用環境
Windows 11 : Home 22H2 + Visual Studio Community 2022(64bit)
Linuxテスト環境 : 上記Windows上のWSL2 Ubuntsu 22.04.2 LTS
Visual Studio2022, AvaloniaUI 11.0.2
コントロール座標の取得
コントロール座標はBoundsから取得する
Avalonia.Point position = MyControl.Bounds.Position;
対Windowのコントロール座標の取得
Windowクライアント領域内での座標の取得にはTransformdBoundsを使う
TransformedBounds transformedBound = (TransformedBounds)MyControl.GetTransformedBounds();
Avalonia.Point position = transformedBound.Clip.Position;
Screen座標の取得
Screen座標は以下で取得できる。ただし、Windowの外枠分はずれる気がする。Window枠のサイズはプラットフォームによって扱いが違うためにAvaloniaUIでの実装はちょっと混乱しているよう。
TransformedBounds transformedBound = (TransformedBounds)MyControl.GetTransformedBounds();
Avalonia.PixelPoint screenPosition = new Avalonia.PixelPoint(
MyWindow.Position.X + (int)(transformedBound.Clip.Position.X * Global.mainWindow.DesktopScaling),
MyWindow.Position.Y + (int)(transformedBound.Clip.Position.Y * Global.mainWindow.DesktopScaling)
);
Discussion