From d814575720e66bf719d6b8e6bc6c9d1deeaa2ff2 Mon Sep 17 00:00:00 2001 From: ApacheZy Date: Fri, 10 Oct 2025 00:42:53 +0800 Subject: [PATCH] Prevent unexpected ContentDialog behavior at design time. --- .../Controls/ContentDialog/ContentDialog.cs | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/src/Wpf.Ui/Controls/ContentDialog/ContentDialog.cs b/src/Wpf.Ui/Controls/ContentDialog/ContentDialog.cs index 02ee306ba..eab8314a7 100644 --- a/src/Wpf.Ui/Controls/ContentDialog/ContentDialog.cs +++ b/src/Wpf.Ui/Controls/ContentDialog/ContentDialog.cs @@ -470,11 +470,16 @@ public ContentDialog() { SetValue(TemplateButtonCommandProperty, new RelayCommand(OnButtonClick)); - Loaded += static (sender, _) => + // Avoid registering runtime code that triggers designer behavior or throws exceptions + // at design time (to reduce the possibility of designer crashes/rendering failures). + if (!Wpf.Ui.Designer.DesignerHelper.IsInDesignMode) { - var self = (ContentDialog)sender; - self.OnLoaded(); - }; + Loaded += static (sender, _) => + { + var self = (ContentDialog)sender; + self.OnLoaded(); + }; + } } /// @@ -492,11 +497,16 @@ public ContentDialog(ContentPresenter? dialogHost) SetValue(TemplateButtonCommandProperty, new RelayCommand(OnButtonClick)); - Loaded += static (sender, _) => + // Avoid registering runtime code that triggers designer behavior or throws exceptions + // at design time (to reduce the possibility of designer crashes/rendering failures). + if (!Wpf.Ui.Designer.DesignerHelper.IsInDesignMode) { - var self = (ContentDialog)sender; - self.OnLoaded(); - }; + Loaded += static (sender, _) => + { + var self = (ContentDialog)sender; + self.OnLoaded(); + }; + } } /// @@ -601,6 +611,12 @@ protected virtual void OnButtonClick(ContentDialogButton button) protected override Size MeasureOverride(Size availableSize) { + // Avoid throwing exceptions when visual child elements cannot be obtained (designer or template not applied). + if (VisualChildrenCount == 0) + { + return base.MeasureOverride(availableSize); + } + var rootElement = (UIElement)GetVisualChild(0)!; rootElement.Measure(availableSize); @@ -622,6 +638,7 @@ protected override Size MeasureOverride(Size availableSize) /// protected virtual void OnLoaded() { + // Focus is only needed at runtime. _ = Focus(); RaiseEvent(new RoutedEventArgs(OpenedEvent));