feat: implement multi layer dialog.

This commit is contained in:
rabbitism
2024-01-23 22:48:30 +08:00
parent 61ebba897b
commit c8540feeb3
15 changed files with 231 additions and 104 deletions

View File

@@ -1,4 +1,5 @@
using Avalonia.Controls;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.Metadata;
using Avalonia.Controls.Primitives;
using Avalonia.Input;
@@ -15,21 +16,21 @@ public class DialogWindow: Window
private Button? _closeButton;
protected override void OnDataContextBeginUpdate()
static DialogWindow()
{
base.OnDataContextBeginUpdate();
if (DataContext is IDialogContext context)
{
context.Closed-= OnDialogClose;
}
DataContextProperty.Changed.AddClassHandler<DialogWindow, object?>((o, e) => o.OnDataContextChange(e));
}
protected override void OnDataContextEndUpdate()
private void OnDataContextChange(AvaloniaPropertyChangedEventArgs<object?> args)
{
base.OnDataContextEndUpdate();
if (DataContext is IDialogContext context)
if (args.OldValue.Value is IDialogContext oldContext)
{
context.Closed += OnDialogClose;
oldContext.Closed-= OnDialogClose;
}
if (args.NewValue.Value is IDialogContext newContext)
{
newContext.Closed += OnDialogClose;
}
}