diff --git a/src/Avalonia.Controls/Design.cs b/src/Avalonia.Controls/Design.cs index 1f7dd4d934b..890d7077c84 100644 --- a/src/Avalonia.Controls/Design.cs +++ b/src/Avalonia.Controls/Design.cs @@ -142,6 +142,40 @@ public static void SetPreviewWith(AvaloniaObject target, ITemplate? tem s_previewWith[target] = template; } + /// + /// Sets a preview control for the specified at design-time. + /// + /// The target object. + /// The preview control. + public static void SetPreviewWith(AvaloniaObject target, Control? control) + { + if (control is null) + { + s_previewWith[target] = null; + return; + } + + switch (target) + { + case ResourceDictionary resourceDictionary: + SetPreviewWith(resourceDictionary, control); + break; + case IDataTemplate dataTemplate: + SetPreviewWith(dataTemplate, control); + break; + case IStyle style: + SetPreviewWith(style, control); + break; + case Visual: + // Not a supported scenario without templates; causes stack overflows. + s_previewWith[target] = null; + break; + default: + SetPreviewWith(target, new FuncTemplate(() => control)); + break; + } + } + /// /// Sets a preview template for the specified at design-time. /// diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/DesignModeTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/DesignModeTests.cs index 42776b236c1..cb2b25f0d54 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/DesignModeTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/DesignModeTests.cs @@ -33,23 +33,19 @@ public void Design_Mode_PreviewWith_Should_Be_Ignored_Without_Design_Mode() } [Fact] - public void Design_Mode_PreviewWith_Works_With_Control_Template() + public void Design_Mode_PreviewWith_Returns_Original_Control() { using (UnitTestApplication.Start(TestServices.MockWindowingPlatform)) { var obj = (Control)AvaloniaRuntimeXamlLoader.Load(@" ", designMode: true); var preview = Design.CreatePreviewWithControl(obj); - var previewBorder = Assert.IsType(preview); - Assert.IsType