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(); + } }