diff --git a/src/Windows/Avalonia.Win32.Interop/Wpf/WpfAvaloniaHost.cs b/src/Windows/Avalonia.Win32.Interop/Wpf/WpfAvaloniaHost.cs index 4f85a326f0..e36b53199a 100644 --- a/src/Windows/Avalonia.Win32.Interop/Wpf/WpfAvaloniaHost.cs +++ b/src/Windows/Avalonia.Win32.Interop/Wpf/WpfAvaloniaHost.cs @@ -29,6 +29,7 @@ namespace Avalonia.Win32.Interop.Wpf _impl.Visibility = Visibility.Visible; AddLogicalChild(_impl); AddVisualChild(_impl); + SnapsToDevicePixels = true; } public object Content diff --git a/src/Windows/Avalonia.Win32.Interop/Wpf/WpfTopLevelImpl.cs b/src/Windows/Avalonia.Win32.Interop/Wpf/WpfTopLevelImpl.cs index c82b71d3a5..7be6b7e800 100644 --- a/src/Windows/Avalonia.Win32.Interop/Wpf/WpfTopLevelImpl.cs +++ b/src/Windows/Avalonia.Win32.Interop/Wpf/WpfTopLevelImpl.cs @@ -54,6 +54,10 @@ namespace Avalonia.Win32.Interop.Wpf ControlRoot = new EmbeddableControlRoot(this); SnapsToDevicePixels = true; Focusable = true; + DataContextChanged += delegate + { + ControlRoot.DataContext = DataContext; + }; } private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam, ref bool handled) @@ -80,15 +84,18 @@ namespace Avalonia.Win32.Interop.Wpf IEnumerable ITopLevelImpl.Surfaces => _surfaces; + private Size _previousSize; protected override System.Windows.Size ArrangeOverride(System.Windows.Size finalSize) { _finalSize = finalSize.ToAvaloniaSize(); + if (_finalSize == _previousSize) + return finalSize; + _previousSize = _finalSize; _ttl.Resized?.Invoke(finalSize.ToAvaloniaSize()); return base.ArrangeOverride(finalSize); } - protected override System.Windows.Size MeasureOverride(System.Windows.Size availableSize) - => ControlRoot.MeasureBase(availableSize.ToAvaloniaSize()).ToWpfSize(); + protected override System.Windows.Size MeasureOverride(System.Windows.Size availableSize) => ControlRoot.MeasureBase(availableSize.ToAvaloniaSize()).ToWpfSize(); protected override void OnRender(DrawingContext drawingContext) {