diff --git a/samples/BehaviorsTestApplication/Views/MainWindow.axaml b/samples/BehaviorsTestApplication/Views/MainWindow.axaml
index 719d2b2f..88346d82 100644
--- a/samples/BehaviorsTestApplication/Views/MainWindow.axaml
+++ b/samples/BehaviorsTestApplication/Views/MainWindow.axaml
@@ -4,12 +4,18 @@
xmlns:vm="using:BehaviorsTestApplication.ViewModels"
xmlns:views="using:BehaviorsTestApplication.Views"
Title="XamlBehaviors Test Application" Width="1000" Height="700"
- x:DataType="vm:MainWindowViewModel"
- x:CompileBindings="False">
+ x:DataType="vm:MainWindowViewModel">
+
+
+
+
+
+
diff --git a/src/Avalonia.Xaml.Interactivity/Interaction.cs b/src/Avalonia.Xaml.Interactivity/Interaction.cs
index ba71a81d..db7d93d4 100644
--- a/src/Avalonia.Xaml.Interactivity/Interaction.cs
+++ b/src/Avalonia.Xaml.Interactivity/Interaction.cs
@@ -149,6 +149,13 @@ private static void SetVisualTreeEventHandlersFromGetter(AvaloniaObject obj)
control.Loaded += Control_LoadedFromGetter;
control.Unloaded -= Control_UnloadedFromGetter;
control.Unloaded += Control_UnloadedFromGetter;
+
+ if (obj is TopLevel topLevel)
+ {
+ topLevel.Opened -= TopLevel_OpenedFromChangedEvent;
+ topLevel.Opened -= TopLevel_OpenedFromGetter;
+ topLevel.Opened += TopLevel_OpenedFromGetter;
+ }
}
private static void SetVisualTreeEventHandlersFromChangedEvent(AvaloniaObject obj)
@@ -184,6 +191,13 @@ private static void SetVisualTreeEventHandlersFromChangedEvent(AvaloniaObject ob
control.Loaded += Control_LoadedFromChangedEvent;
control.Unloaded -= Control_UnloadedFromChangedEvent;
control.Unloaded += Control_UnloadedFromChangedEvent;
+
+ if (obj is TopLevel topLevel)
+ {
+ topLevel.Opened -= TopLevel_OpenedFromGetter;
+ topLevel.Opened -= TopLevel_OpenedFromChangedEvent;
+ topLevel.Opened += TopLevel_OpenedFromChangedEvent;
+ }
}
// AttachedToVisualTree / DetachedFromVisualTree
@@ -313,4 +327,29 @@ private static void Control_UnloadedFromChangedEvent(object? sender, RoutedEvent
GetBehaviors(d).Unloaded();
}
+
+ // TopLevel Opened
+
+ private static void TopLevel_OpenedFromGetter(object sender, EventArgs e)
+ {
+ if (sender is not AvaloniaObject d)
+ {
+ return;
+ }
+
+ GetBehaviors(d).Attach(d);
+ GetBehaviors(d).AttachedToVisualTree();
+ GetBehaviors(d).AttachedToLogicalTree();
+ }
+
+ private static void TopLevel_OpenedFromChangedEvent(object sender, EventArgs e)
+ {
+ if (sender is not AvaloniaObject d)
+ {
+ return;
+ }
+
+ GetBehaviors(d).AttachedToVisualTree();
+ GetBehaviors(d).AttachedToLogicalTree();
+ }
}