Browse Source

Invalidate parent grid when property changes on DefBase.

Link ActualWidth/Height setters to their parent GetFinalColumnDefinitionWidth/GetFinalRowDefinitionWidth
pull/2563/head
Jumar Macato 7 years ago
parent
commit
c7a372d0b6
No known key found for this signature in database GPG Key ID: B19884DAC3A5BF3F
  1. 6
      src/Avalonia.Controls/ColumnDefinition.cs
  2. 33
      src/Avalonia.Controls/DefinitionBase.cs
  3. 10
      src/Avalonia.Controls/Grid.cs
  4. 6
      src/Avalonia.Controls/RowDefinition.cs

6
src/Avalonia.Controls/ColumnDefinition.cs

@ -55,11 +55,7 @@ namespace Avalonia.Controls
/// <summary>
/// Gets the actual calculated width of the column.
/// </summary>
public double ActualWidth
{
get;
internal set;
}
public double ActualWidth => Parent?.GetFinalColumnDefinitionWidth(Index) ?? 0d;
/// <summary>
/// Gets or sets the maximum width of the column in DIPs.

33
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);
}
/// <summary>
/// Callback to notify about exitting model tree.
/// </summary>
@ -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); }
}
/// <summary>
@ -135,32 +144,28 @@ namespace Avalonia.Controls
/// <remarks>
/// This method needs to be internal to be accessable from derived classes.
/// </remarks>
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();
}
}
}
}
/// <summary>
/// <see cref="AvaloniaProperty.ValidateValueCallback"/>
/// </summary>

10
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();
}

6
src/Avalonia.Controls/RowDefinition.cs

@ -55,11 +55,7 @@ namespace Avalonia.Controls
/// <summary>
/// Gets the actual calculated height of the row.
/// </summary>
public double ActualHeight
{
get;
internal set;
}
public double ActualHeight => Parent?.GetFinalRowDefinitionHeight(Index) ?? 0d;
/// <summary>
/// Gets or sets the maximum height of the row in DIPs.

Loading…
Cancel
Save