diff --git a/src/Avalonia.Controls/ColumnDefinition.cs b/src/Avalonia.Controls/ColumnDefinition.cs
index d87a683cc8..e3d2489241 100644
--- a/src/Avalonia.Controls/ColumnDefinition.cs
+++ b/src/Avalonia.Controls/ColumnDefinition.cs
@@ -55,11 +55,7 @@ namespace Avalonia.Controls
///
/// Gets the actual calculated width of the column.
///
- public double ActualWidth
- {
- get;
- internal set;
- }
+ public double ActualWidth => Parent?.GetFinalColumnDefinitionWidth(Index) ?? 0d;
///
/// Gets or sets the maximum width of the column in DIPs.
diff --git a/src/Avalonia.Controls/DefinitionBase.cs b/src/Avalonia.Controls/DefinitionBase.cs
index 0c696a1035..a0b68a25a6 100644
--- a/src/Avalonia.Controls/DefinitionBase.cs
+++ b/src/Avalonia.Controls/DefinitionBase.cs
@@ -85,6 +85,15 @@ namespace Avalonia.Controls
}
}
+ protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs e)
+ {
+ if(e.Property.PropertyType == typeof(GridLength)
+ || e.Property.PropertyType == typeof(double))
+ OnUserSizePropertyChanged(e);
+
+ base.OnPropertyChanged(e);
+ }
+
///
/// Callback to notify about exitting model tree.
///
@@ -108,7 +117,7 @@ namespace Avalonia.Controls
LayoutWasUpdated = true;
// defer verification for shared definitions
- if (_sharedState != null) { _sharedState.EnsureDeferredValidation(grid); }
+ if (_sharedState != null) { _sharedState.EnsureDeferredValidation(grid); }
}
///
@@ -135,32 +144,28 @@ namespace Avalonia.Controls
///
/// This method needs to be internal to be accessable from derived classes.
///
- internal static void OnUserSizePropertyChanged(AvaloniaObject d, AvaloniaPropertyChangedEventArgs e)
+ internal void OnUserSizePropertyChanged(AvaloniaPropertyChangedEventArgs e)
{
- DefinitionBase definition = (DefinitionBase) d;
-
- if (definition.InParentLogicalTree)
+ if (InParentLogicalTree)
{
- if (definition._sharedState != null)
+ if (_sharedState != null)
{
- definition._sharedState.Invalidate();
+ _sharedState.Invalidate();
}
else
{
- Grid parentGrid = (Grid) definition.Parent;
-
- if (((GridLength) e.OldValue).GridUnitType != ((GridLength) e.NewValue).GridUnitType)
+ if (((GridLength)e.OldValue).GridUnitType != ((GridLength)e.NewValue).GridUnitType)
{
- parentGrid.Invalidate();
+ Parent.Invalidate();
}
else
- {
- parentGrid.InvalidateMeasure();
+ {
+ Parent.InvalidateMeasure();
}
}
}
}
-
+
///
///
///
diff --git a/src/Avalonia.Controls/Grid.cs b/src/Avalonia.Controls/Grid.cs
index 269d7a3093..1d9251076d 100644
--- a/src/Avalonia.Controls/Grid.cs
+++ b/src/Avalonia.Controls/Grid.cs
@@ -656,11 +656,8 @@ namespace Avalonia.Controls
}
// update render bound on grid lines renderer visual
- GridLinesRenderer gridLinesRenderer = EnsureGridLinesRenderer();
- if (gridLinesRenderer != null)
- {
- gridLinesRenderer.UpdateRenderBounds(arrangeSize);
- }
+ var gridLinesRenderer = EnsureGridLinesRenderer();
+ gridLinesRenderer?.UpdateRenderBounds(arrangeSize);
}
}
finally
@@ -956,6 +953,7 @@ namespace Avalonia.Controls
for(int i = 0; i < extData.DefinitionsU.Count;i++)
{
var definition = extData.DefinitionsU[i];
+ definition.Parent = this;
definition.Index = i;
definition.OnEnterParentTree();
}
@@ -1009,6 +1007,7 @@ namespace Avalonia.Controls
for(int i = 0; i < extData.DefinitionsV.Count;i++)
{
var definition = extData.DefinitionsV[i];
+ definition.Parent = this;
definition.Index = i;
definition.OnEnterParentTree();
}
@@ -4075,6 +4074,7 @@ namespace Avalonia.Controls
internal void UpdateRenderBounds(Size arrangeSize)
{
_lastArrangeSize = arrangeSize;
+ this.InvalidateMeasure();
this.InvalidateVisual();
}
diff --git a/src/Avalonia.Controls/RowDefinition.cs b/src/Avalonia.Controls/RowDefinition.cs
index f2f09f797c..ad7312d515 100644
--- a/src/Avalonia.Controls/RowDefinition.cs
+++ b/src/Avalonia.Controls/RowDefinition.cs
@@ -55,11 +55,7 @@ namespace Avalonia.Controls
///
/// Gets the actual calculated height of the row.
///
- public double ActualHeight
- {
- get;
- internal set;
- }
+ public double ActualHeight => Parent?.GetFinalRowDefinitionHeight(Index) ?? 0d;
///
/// Gets or sets the maximum height of the row in DIPs.