diff --git a/src/Avalonia.Controls/Grid/DefinitionBase.cs b/src/Avalonia.Controls/Grid/DefinitionBase.cs index e21d55c1f6..a59ab3cdb9 100644 --- a/src/Avalonia.Controls/Grid/DefinitionBase.cs +++ b/src/Avalonia.Controls/Grid/DefinitionBase.cs @@ -19,6 +19,7 @@ namespace Avalonia.Controls { SharedSizeGroupProperty.Changed.AddClassHandler(OnSharedSizeGroupPropertyChanged); } + internal bool UseSharedMinimum { get; set; } internal bool LayoutWasUpdated { get; set; } @@ -59,10 +60,10 @@ namespace Avalonia.Controls { if (_sharedState == null & SharedSizeGroup != null & - Parent?.sharedSizeScope != null & + Parent?.PrivateSharedSizeScope != null & !_successUpdateSharedScope) { - _privateSharedSizeScope = Parent.sharedSizeScope; + _privateSharedSizeScope = Parent.PrivateSharedSizeScope; _sharedState = _privateSharedSizeScope.EnsureSharedState(SharedSizeGroup); _sharedState.AddMember(this); _successUpdateSharedScope = true; diff --git a/src/Avalonia.Controls/Grid/Grid.cs b/src/Avalonia.Controls/Grid/Grid.cs index c08c4396c5..075d2c098f 100644 --- a/src/Avalonia.Controls/Grid/Grid.cs +++ b/src/Avalonia.Controls/Grid/Grid.cs @@ -86,7 +86,12 @@ namespace Avalonia.Controls private RowDefinitions _rowDefinitions; private DefinitionBase[] _definitionsU = new DefinitionBase[1] { new ColumnDefinition() }; private DefinitionBase[] _definitionsV = new DefinitionBase[1] { new RowDefinition() }; - internal SharedSizeScope sharedSizeScope; + + internal SharedSizeScope PrivateSharedSizeScope + { + get { return GetPrivateSharedSizeScope(this); } + set { SetPrivateSharedSizeScope(this, value); } + } // 5 is an arbitrary constant chosen to end the measure loop private const int _layoutLoopMaxCount = 5; @@ -197,11 +202,11 @@ namespace Avalonia.Controls { if ((bool)e.NewValue) { - grid.sharedSizeScope = new SharedSizeScope(); + grid.PrivateSharedSizeScope = new SharedSizeScope(); } else { - grid.sharedSizeScope = null; + grid.PrivateSharedSizeScope = null; } } @@ -236,6 +241,9 @@ namespace Avalonia.Controls public static readonly AttachedProperty IsSharedSizeScopeProperty = AvaloniaProperty.RegisterAttached("IsSharedSizeScope", false); + internal static readonly AttachedProperty PrivateSharedSizeScopeProperty = + AvaloniaProperty.RegisterAttached("PrivateSharedSizeScope", null, inherits: true); + /// /// Defines the property. /// @@ -409,13 +417,21 @@ namespace Avalonia.Controls /// /// Sets the value of the IsSharedSizeScope attached property for a control. /// - /// The control. - /// The control's IsSharedSizeScope value. public static void SetIsSharedSizeScope(AvaloniaObject element, bool value) { element.SetValue(IsSharedSizeScopeProperty, value); } + internal static SharedSizeScope GetPrivateSharedSizeScope(AvaloniaObject element) + { + return element.GetValue(PrivateSharedSizeScopeProperty); + } + + internal static void SetPrivateSharedSizeScope(AvaloniaObject element, SharedSizeScope value) + { + element.SetValue(PrivateSharedSizeScopeProperty, value); + } + /// /// Sets the value of the Column attached property for a control. ///