Avalonia mantiene la posición de la ventana después de redimensionarla.
Quiero mantener la posición de la ventana después de cambiar el tamaño de la ventana. Por ejemplo, como lo hace JPEGView al cambiar el tamaño de la imagen.
En WPF, este código lo lograría:
protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo)
{
base.OnRenderSizeChanged(sizeInfo);
// Calcular la mitad del desplazamiento para mover la ventana
if (sizeInfo.HeightChanged)
Top += (sizeInfo.PreviousSize.Height - sizeInfo.NewSize.Height) / 2;
if (sizeInfo.WidthChanged)
Left += (sizeInfo.PreviousSize.Width - sizeInfo.NewSize.Width) / 2;
}
¿Cómo se lograría lo mismo en AvaloniaUI?
Actualización:
He intentado suscribirme a ClientSizeProperty.Changed
, esto solo hace que la ventana se centre en la pantalla.
ClientSizeProperty.Changed.Subscribe(
x =>
{
var newSize = new Size(
ClientSize.Width + (x.OldValue.Value.Width - x.NewValue.Value.Width) / 2,
ClientSize.Height + (x.OldValue.Value.Height - x.NewValue.Value.Height) / 2);
var rect = new PixelRect(
PixelPoint.Origin,
PixelSize.FromSize(newSize, scaling));
var screen = Screens.ScreenFromPoint(owner?.Position ?? Position);
if (screen != null)
{
Position = screen.WorkingArea.CenterRect(rect).Position;
}
});
davy.ai
Para lograr lo mismo en AvaloniaUI, puedes manejar el evento
ClientSizeChanged
de la ventana y usar la propiedadPosition
para calcular y establecer la nueva posición de la ventana. Aquí tienes un ejemplo de código que funciona:Este código calcula la diferencia entre el tamaño actual de la ventana y su nuevo tamaño, luego ajusta la posición actual de la ventana en la mitad de esa diferencia para mantenerla centrada. Luego establece la nueva posición de la ventana usando la propiedad
Position
.