Skip to content

Commit 266d68e

Browse files
fix: Prevent unexpected ContentDialog behavior at design time (#1543)
Co-authored-by: pomian <[email protected]>
1 parent 0fa7746 commit 266d68e

File tree

1 file changed

+25
-8
lines changed

1 file changed

+25
-8
lines changed

src/Wpf.Ui/Controls/ContentDialog/ContentDialog.cs

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -470,11 +470,16 @@ public ContentDialog()
470470
{
471471
SetValue(TemplateButtonCommandProperty, new RelayCommand<ContentDialogButton>(OnButtonClick));
472472

473-
Loaded += static (sender, _) =>
473+
// Avoid registering runtime code that triggers designer behavior or throws exceptions
474+
// at design time (to reduce the possibility of designer crashes/rendering failures).
475+
if (!Wpf.Ui.Designer.DesignerHelper.IsInDesignMode)
474476
{
475-
var self = (ContentDialog)sender;
476-
self.OnLoaded();
477-
};
477+
Loaded += static (sender, _) =>
478+
{
479+
var self = (ContentDialog)sender;
480+
self.OnLoaded();
481+
};
482+
}
478483
}
479484

480485
/// <summary>
@@ -492,11 +497,16 @@ public ContentDialog(ContentPresenter? dialogHost)
492497

493498
SetValue(TemplateButtonCommandProperty, new RelayCommand<ContentDialogButton>(OnButtonClick));
494499

495-
Loaded += static (sender, _) =>
500+
// Avoid registering runtime code that triggers designer behavior or throws exceptions
501+
// at design time (to reduce the possibility of designer crashes/rendering failures).
502+
if (!Wpf.Ui.Designer.DesignerHelper.IsInDesignMode)
496503
{
497-
var self = (ContentDialog)sender;
498-
self.OnLoaded();
499-
};
504+
Loaded += static (sender, _) =>
505+
{
506+
var self = (ContentDialog)sender;
507+
self.OnLoaded();
508+
};
509+
}
500510
}
501511

502512
/// <summary>
@@ -601,6 +611,12 @@ protected virtual void OnButtonClick(ContentDialogButton button)
601611

602612
protected override Size MeasureOverride(Size availableSize)
603613
{
614+
// Avoid throwing exceptions when visual child elements cannot be obtained (designer or template not applied).
615+
if (VisualChildrenCount == 0)
616+
{
617+
return base.MeasureOverride(availableSize);
618+
}
619+
604620
var rootElement = (UIElement)GetVisualChild(0)!;
605621

606622
rootElement.Measure(availableSize);
@@ -622,6 +638,7 @@ protected override Size MeasureOverride(Size availableSize)
622638
/// </summary>
623639
protected virtual void OnLoaded()
624640
{
641+
// Focus is only needed at runtime.
625642
_ = Focus();
626643

627644
RaiseEvent(new RoutedEventArgs(OpenedEvent));

0 commit comments

Comments
 (0)