diff --git a/demo/Ursa.Demo/Pages/DialogDemo.axaml b/demo/Ursa.Demo/Pages/DialogDemo.axaml
index 3474c87..9eb9357 100644
--- a/demo/Ursa.Demo/Pages/DialogDemo.axaml
+++ b/demo/Ursa.Demo/Pages/DialogDemo.axaml
@@ -33,7 +33,9 @@
Command="{Binding ShowLocalOverlayModalDialogCommand}">
Show Local Overlay Dialog
-
+
+
+
diff --git a/src/Ursa/Controls/Dialog/Dialog.cs b/src/Ursa/Controls/Dialog/Dialog.cs
index a293f4d..0c3a845 100644
--- a/src/Ursa/Controls/Dialog/Dialog.cs
+++ b/src/Ursa/Controls/Dialog/Dialog.cs
@@ -54,7 +54,7 @@ public static class OverlayDialog
Content = new TView(){ DataContext = vm },
DataContext = vm,
};
- var host = OverlayDialogManager.GetOverlayDialogHost(hostId);
+ var host = OverlayDialogManager.GetHost(hostId);
host?.AddModalDialog(t);
return t.ShowAsync();
}
@@ -69,7 +69,7 @@ public static class OverlayDialog
ExtendToClientArea = options.ExtendToClientArea,
Title = options.Title,
};
- var host = OverlayDialogManager.GetOverlayDialogHost(hostId);
+ var host = OverlayDialogManager.GetHost(hostId);
host?.AddModalDialog(t);
return t.ShowAsync();
}
@@ -82,7 +82,7 @@ public static class OverlayDialog
Content = new TView() { DataContext = vm },
DataContext = vm,
};
- var host = OverlayDialogManager.GetOverlayDialogHost(hostId);
+ var host = OverlayDialogManager.GetHost(hostId);
host?.AddDialog(t);
}
@@ -96,7 +96,7 @@ public static class OverlayDialog
ExtendToClientArea = options.ExtendToClientArea,
Title = options.Title,
};
- var host = OverlayDialogManager.GetOverlayDialogHost(hostId);
+ var host = OverlayDialogManager.GetHost(hostId);
host?.AddModalDialog(t);
}
}
\ No newline at end of file
diff --git a/src/Ursa/Controls/Dialog/OverlayDialogHost.cs b/src/Ursa/Controls/Dialog/OverlayDialogHost.cs
index 3cba9b6..67fec8c 100644
--- a/src/Ursa/Controls/Dialog/OverlayDialogHost.cs
+++ b/src/Ursa/Controls/Dialog/OverlayDialogHost.cs
@@ -1,5 +1,6 @@
using Avalonia;
using Avalonia.Controls;
+using Avalonia.Controls.Primitives;
using Avalonia.Input;
using Avalonia.Layout;
using Avalonia.Media;
@@ -40,7 +41,7 @@ public class OverlayDialogHost : Canvas
protected sealed override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
{
base.OnAttachedToVisualTree(e);
- OverlayDialogManager.RegisterOverlayDialogHost(this, HostId);
+ OverlayDialogManager.RegisterHost(this, HostId);
}
protected sealed override void OnSizeChanged(SizeChangedEventArgs e)
@@ -55,7 +56,7 @@ public class OverlayDialogHost : Canvas
protected override void OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs e)
{
- OverlayDialogManager.UnregisterOverlayDialogHost(HostId);
+ OverlayDialogManager.UnregisterHost(HostId);
base.OnDetachedFromVisualTree(e);
}
@@ -90,6 +91,9 @@ public class OverlayDialogHost : Canvas
{
this.Children.Add(control);
_dialogs.Add(control);
+ control.Measure(this.Bounds.Size);
+ control.Arrange(new Rect(control.DesiredSize));
+ SetToCenter(control);
control.OnClose += OnDialogClose;
control.OnLayerChange += OnDialogLayerChange;
ResetZIndices();
@@ -140,6 +144,9 @@ public class OverlayDialogHost : Canvas
ResetZIndices();
this.Children.Add(mask);
this.Children.Add(control);
+ control.Measure(this.Bounds.Size);
+ control.Arrange(new Rect(control.DesiredSize));
+ SetToCenter(control);
control.OnClose += OnDialogClose;
control.OnLayerChange += OnDialogLayerChange;
}
@@ -200,4 +207,16 @@ public class OverlayDialogHost : Canvas
index++;
}
}
+
+ private void SetToCenter(DialogControl? control)
+ {
+ // return;
+ if (control is null) return;
+ double left = (this.Bounds.Width - control.Bounds.Width) / 2;
+ double top = (this.Bounds.Height - control.Bounds.Height) / 2;
+ left = MathUtilities.Clamp(left, 0, Bounds.Width);
+ top = MathUtilities.Clamp(top, 0, Bounds.Height);
+ Canvas.SetLeft(control, left);
+ Canvas.SetTop(control, top);
+ }
}
\ No newline at end of file
diff --git a/src/Ursa/Controls/Dialog/OverlayDialogManager.cs b/src/Ursa/Controls/Dialog/OverlayDialogManager.cs
index 1a0a0c0..82e88af 100644
--- a/src/Ursa/Controls/Dialog/OverlayDialogManager.cs
+++ b/src/Ursa/Controls/Dialog/OverlayDialogManager.cs
@@ -7,7 +7,7 @@ internal static class OverlayDialogManager
private static OverlayDialogHost? _defaultHost;
private static readonly ConcurrentDictionary Hosts = new();
- public static void RegisterOverlayDialogHost(OverlayDialogHost host, string? id)
+ public static void RegisterHost(OverlayDialogHost host, string? id)
{
if (id == null)
{
@@ -21,7 +21,7 @@ internal static class OverlayDialogManager
Hosts.TryAdd(id, host);
}
- public static void UnregisterOverlayDialogHost(string? id)
+ public static void UnregisterHost(string? id)
{
if (id is null)
{
@@ -31,7 +31,7 @@ internal static class OverlayDialogManager
Hosts.TryRemove(id, out _);
}
- public static OverlayDialogHost? GetOverlayDialogHost(string? id)
+ public static OverlayDialogHost? GetHost(string? id)
{
if (id is null)
{