diff --git a/samples/Sandbox/MainWindow.axaml.cs b/samples/Sandbox/MainWindow.axaml.cs
index 23d45edf6a..b8e9f0ff42 100644
--- a/samples/Sandbox/MainWindow.axaml.cs
+++ b/samples/Sandbox/MainWindow.axaml.cs
@@ -6,17 +6,11 @@ using Avalonia.Win32.WinRT.Composition;
namespace Sandbox
{
- public class MainWindow : Window
+ public partial class MainWindow : Window
{
public MainWindow()
{
- this.InitializeComponent();
- this.AttachDevTools();
- }
-
- private void InitializeComponent()
- {
- AvaloniaXamlLoader.Load(this);
+ InitializeComponent();
}
}
}
diff --git a/samples/Sandbox/Sandbox.csproj b/samples/Sandbox/Sandbox.csproj
index f23e391a2a..d2e66988e0 100644
--- a/samples/Sandbox/Sandbox.csproj
+++ b/samples/Sandbox/Sandbox.csproj
@@ -4,6 +4,7 @@
WinExe
net6.0
true
+ true
@@ -17,4 +18,5 @@
+
diff --git a/src/Avalonia.Controls/WindowBase.cs b/src/Avalonia.Controls/WindowBase.cs
index d640a0c2dc..ac47e744e0 100644
--- a/src/Avalonia.Controls/WindowBase.cs
+++ b/src/Avalonia.Controls/WindowBase.cs
@@ -83,6 +83,19 @@ namespace Avalonia.Controls
///
/// Occurs when the window is resized.
///
+ ///
+ /// Although this event is similar to the event, they are
+ /// conceptually different:
+ ///
+ /// - is a window-level event, fired when a resize notification arrives
+ /// from the platform windowing subsystem. The event args contain details of the source of
+ /// the resize event in the property. This
+ /// event is raised before layout has been run on the window's content.
+ /// - is a layout-level event, fired when a layout pass
+ /// completes on a control. is present on all controls
+ /// and is fired when the control's size changes for any reason, including a
+ /// event in the case of a Window.
+ ///
public event EventHandler? Resized;
public new IWindowBaseImpl? PlatformImpl => (IWindowBaseImpl?) base.PlatformImpl;
@@ -237,14 +250,16 @@ namespace Avalonia.Controls
{
FrameSize = PlatformImpl?.FrameSize;
- if (ClientSize != clientSize)
+ var clientSizeChanged = ClientSize != clientSize;
+
+ ClientSize = clientSize;
+ OnResized(new WindowResizedEventArgs(clientSize, reason));
+
+ if (clientSizeChanged)
{
- ClientSize = clientSize;
LayoutManager.ExecuteLayoutPass();
Renderer.Resized(clientSize);
}
-
- OnResized(new WindowResizedEventArgs(clientSize, reason));
}
///
diff --git a/src/Avalonia.Diagnostics/Diagnostics/Views/TreePageView.xaml.cs b/src/Avalonia.Diagnostics/Diagnostics/Views/TreePageView.xaml.cs
index 66be6b5041..b0aea64994 100644
--- a/src/Avalonia.Diagnostics/Diagnostics/Views/TreePageView.xaml.cs
+++ b/src/Avalonia.Diagnostics/Diagnostics/Views/TreePageView.xaml.cs
@@ -39,16 +39,6 @@ namespace Avalonia.Diagnostics.Views
AdornerLayer.SetIsClipEnabled(_adorner, false);
}
- protected override void OnDataContextChanged(EventArgs e)
- {
- base.OnDataContextChanged(e);
-
- ((TreePageViewModel)DataContext!).ClipboardCopyRequested += (sender, s) =>
- {
- TopLevel.GetTopLevel(this)?.Clipboard?.SetTextAsync(s);
- };
- }
-
protected void AddAdorner(object? sender, PointerEventArgs e)
{
var node = (TreeNode?)((Control)sender!).DataContext;
@@ -108,9 +98,27 @@ namespace Avalonia.Diagnostics.Views
_currentLayer = null;
}
+ protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
+ {
+ base.OnPropertyChanged(change);
+
+ if (change.Property == DataContextProperty)
+ {
+ if (change.GetOldValue