diff --git a/src/Avalonia.Controls/ContentControl.cs b/src/Avalonia.Controls/ContentControl.cs
index 867dca2be1..176157001e 100644
--- a/src/Avalonia.Controls/ContentControl.cs
+++ b/src/Avalonia.Controls/ContentControl.cs
@@ -95,6 +95,17 @@ namespace Avalonia.Controls
///
IAvaloniaList IContentPresenterHost.LogicalChildren => LogicalChildren;
+ ///
+ /// Determine whether manage his LogicalChildren
+ ///(default behavior) himself, or leaves the management to the inherited control.
+ ///
+ ///
+ /// The default value is false, So the manages itself,
+ /// if you want to bypass this behavior and manage LogicalChildren yourself, set
+ /// the to true.
+ ///
+ protected virtual bool BypassLogicalChildrenManangment => false;
+
///
bool IContentPresenterHost.RegisterContentPresenter(ContentPresenter presenter)
{
@@ -118,6 +129,11 @@ namespace Avalonia.Controls
private void ContentChanged(AvaloniaPropertyChangedEventArgs e)
{
+ if (BypassLogicalChildrenManangment)
+ {
+ return;
+ }
+
if (e.OldValue is ILogical oldChild)
{
LogicalChildren.Remove(oldChild);
diff --git a/src/Avalonia.Controls/TransitioningContentControl.cs b/src/Avalonia.Controls/TransitioningContentControl.cs
index bf540698f1..75f95d1d68 100644
--- a/src/Avalonia.Controls/TransitioningContentControl.cs
+++ b/src/Avalonia.Controls/TransitioningContentControl.cs
@@ -36,6 +36,9 @@ public class TransitioningContentControl : ContentControl
set => SetValue(PageTransitionProperty, value);
}
+ ///
+ protected override bool BypassLogicalChildrenManangment => true;
+
protected override Size ArrangeOverride(Size finalSize)
{
var result = base.ArrangeOverride(finalSize);
@@ -79,8 +82,12 @@ public class TransitioningContentControl : ContentControl
protected override bool RegisterContentPresenter(ContentPresenter presenter)
{
- if (!base.RegisterContentPresenter(presenter) &&
- presenter is ContentPresenter p &&
+ if (base.RegisterContentPresenter(presenter))
+ {
+ return true;
+ }
+
+ if (presenter is ContentPresenter p &&
p.Name == "PART_ContentPresenter2")
{
_presenter2 = p;