detect/WebViewControl.Avalonia/BaseControl.cs

33 lines
1.2 KiB
C#
Raw Normal View History

2024-11-13 17:09:15 +08:00
using System;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.LogicalTree;
namespace WebViewControl {
public abstract class BaseControl : Control {
2024-11-27 15:20:42 +08:00
2024-11-13 17:09:15 +08:00
protected abstract void InternalDispose();
protected override void OnAttachedToLogicalTree(LogicalTreeAttachmentEventArgs e) {
if (e.Root is Window window) {
// need to subscribe the event this way because close gets called after all elements get detached
window.AddHandler(Window.WindowClosedEvent, (EventHandler<RoutedEventArgs>)OnHostWindowClosed);
}
base.OnAttachedToLogicalTree(e);
}
protected override void OnDetachedFromLogicalTree(LogicalTreeAttachmentEventArgs e) {
if (e.Root is Window window) {
window.RemoveHandler(Window.WindowClosedEvent, (EventHandler<RoutedEventArgs>)OnHostWindowClosed);
}
base.OnDetachedFromLogicalTree(e);
}
private void OnHostWindowClosed(object sender, RoutedEventArgs eventArgs) {
((Window)sender).RemoveHandler(Window.WindowClosedEvent, (EventHandler<RoutedEventArgs>)OnHostWindowClosed);
InternalDispose();
}
}
}