diff --git a/src/Ursa/Controls/Dialog/Dialog.cs b/src/Ursa/Controls/Dialog/Dialog.cs index 15d7ed5..9922f15 100644 --- a/src/Ursa/Controls/Dialog/Dialog.cs +++ b/src/Ursa/Controls/Dialog/Dialog.cs @@ -216,7 +216,8 @@ public static class Dialog } if (!string.IsNullOrWhiteSpace(options.StyleClass)) { - window.Classes.Add(options.StyleClass); + var styles = options.StyleClass!.Split([' '], StringSplitOptions.RemoveEmptyEntries); + window.Classes.AddRange(styles); } } @@ -246,7 +247,8 @@ public static class Dialog } if (!string.IsNullOrWhiteSpace(options.StyleClass)) { - window.Classes.Add(options.StyleClass); + var styles = options.StyleClass!.Split([' '], StringSplitOptions.RemoveEmptyEntries); + window.Classes.AddRange(styles); } } } \ No newline at end of file diff --git a/src/Ursa/Controls/Dialog/OverlayDialog.cs b/src/Ursa/Controls/Dialog/OverlayDialog.cs index 15bd7eb..6028f83 100644 --- a/src/Ursa/Controls/Dialog/OverlayDialog.cs +++ b/src/Ursa/Controls/Dialog/OverlayDialog.cs @@ -207,7 +207,8 @@ public static class OverlayDialog control.CanResize = options.CanResize; if (!string.IsNullOrWhiteSpace(options.StyleClass)) { - control.Classes.Add(options.StyleClass); + var styles = options.StyleClass!.Split([' '], StringSplitOptions.RemoveEmptyEntries); + control.Classes.AddRange(styles); } DialogControlBase.SetCanDragMove(control, options.CanDragMove); } @@ -237,7 +238,8 @@ public static class OverlayDialog control.CanResize = options.CanResize; if (!string.IsNullOrWhiteSpace(options.StyleClass)) { - control.Classes.Add(options.StyleClass); + var styles = options.StyleClass!.Split([' '], StringSplitOptions.RemoveEmptyEntries); + control.Classes.AddRange(styles); } DialogControlBase.SetCanDragMove(control, options.CanDragMove); } diff --git a/src/Ursa/Controls/Drawer/Drawer.cs b/src/Ursa/Controls/Drawer/Drawer.cs index 4deaeaa..2bc3340 100644 --- a/src/Ursa/Controls/Drawer/Drawer.cs +++ b/src/Ursa/Controls/Drawer/Drawer.cs @@ -220,7 +220,8 @@ public static class Drawer if (!string.IsNullOrWhiteSpace(options.StyleClass)) { - drawer.Classes.Add(options.StyleClass!); + var styles = options.StyleClass!.Split([' '], StringSplitOptions.RemoveEmptyEntries); + drawer.Classes.AddRange(styles); } } @@ -246,7 +247,8 @@ public static class Drawer } if (!string.IsNullOrWhiteSpace(options.StyleClass)) { - drawer.Classes.Add(options.StyleClass!); + var styles = options.StyleClass!.Split([' '], StringSplitOptions.RemoveEmptyEntries); + drawer.Classes.AddRange(styles); } } } \ No newline at end of file diff --git a/src/Ursa/Controls/MessageBox/MessageBox.cs b/src/Ursa/Controls/MessageBox/MessageBox.cs index 86c059b..14c6c8a 100644 --- a/src/Ursa/Controls/MessageBox/MessageBox.cs +++ b/src/Ursa/Controls/MessageBox/MessageBox.cs @@ -22,7 +22,8 @@ public static class MessageBox }; if (!string.IsNullOrWhiteSpace(styleClass)) { - messageWindow.Classes.Add(styleClass!); + var styles = styleClass!.Split([' '], StringSplitOptions.RemoveEmptyEntries); + messageWindow.Classes.AddRange(styles); } var lifetime = Application.Current?.ApplicationLifetime; if (lifetime is not IClassicDesktopStyleApplicationLifetime classLifetime) return MessageBoxResult.None; @@ -53,7 +54,8 @@ public static class MessageBox }; if (!string.IsNullOrWhiteSpace(styleClass)) { - messageWindow.Classes.Add(styleClass!); + var styles = styleClass!.Split([' '], StringSplitOptions.RemoveEmptyEntries); + messageWindow.Classes.AddRange(styles!); } var result = await messageWindow.ShowDialog(owner); return result; @@ -80,7 +82,8 @@ public static class MessageBox }; if (!string.IsNullOrWhiteSpace(styleClass)) { - messageControl.Classes.Add(styleClass!); + var styles = styleClass!.Split([' '], StringSplitOptions.RemoveEmptyEntries); + messageControl.Classes.AddRange(styles!); } host.AddModalDialog(messageControl); var result = await messageControl.ShowAsync(); diff --git a/src/Ursa/Controls/OverlayShared/OverlayDialogManager.cs b/src/Ursa/Controls/OverlayShared/OverlayDialogManager.cs index 685d690..ba87b7a 100644 --- a/src/Ursa/Controls/OverlayShared/OverlayDialogManager.cs +++ b/src/Ursa/Controls/OverlayShared/OverlayDialogManager.cs @@ -1,4 +1,5 @@ using System.Collections.Concurrent; +using System.Diagnostics; namespace Ursa.Controls; @@ -10,6 +11,7 @@ internal static class OverlayDialogManager public static void RegisterHost(OverlayDialogHost host, string? id, int? hash) { + Debug.WriteLine("Count: "+Hosts.Count); Hosts.TryAdd(new HostKey(id, hash), host); } diff --git a/src/Ursa/Ursa.csproj b/src/Ursa/Ursa.csproj index 190bae4..fda6393 100644 --- a/src/Ursa/Ursa.csproj +++ b/src/Ursa/Ursa.csproj @@ -15,8 +15,8 @@ - - + + diff --git a/tests/HeadlessTest.Ursa/Controls/DialogTests/StyleClassTests/StyleClassTests.cs b/tests/HeadlessTest.Ursa/Controls/DialogTests/StyleClassTests/StyleClassTests.cs index bfcc733..389912d 100644 --- a/tests/HeadlessTest.Ursa/Controls/DialogTests/StyleClassTests/StyleClassTests.cs +++ b/tests/HeadlessTest.Ursa/Controls/DialogTests/StyleClassTests/StyleClassTests.cs @@ -1,7 +1,9 @@ using Avalonia.Controls; using Avalonia.Headless.XUnit; +using Avalonia.Threading; using Avalonia.VisualTree; using Ursa.Controls; +using Xunit; namespace HeadlessTest.Ursa.Controls.DialogTests.StyleClassTests; @@ -16,7 +18,8 @@ public class StyleClassTests DataContext = vm, }; ursaWindow.Show(); - vm.InvokeDialog(); + vm.InvokeDialog("Custom", ursaWindow.GetHashCode()); + Dispatcher.UIThread.RunJobs(); var dialog = ursaWindow.GetVisualDescendants().OfType().SingleOrDefault(); Assert.NotNull(dialog); Assert.Contains("Custom", dialog.Classes); @@ -26,5 +29,58 @@ public class StyleClassTests var cancelButton = dialog.GetVisualDescendants().OfType