diff --git a/src/Avalonia.Controls/Border.cs b/src/Avalonia.Controls/Border.cs index bd63c178e7..531d2c40e4 100644 --- a/src/Avalonia.Controls/Border.cs +++ b/src/Avalonia.Controls/Border.cs @@ -81,6 +81,10 @@ namespace Avalonia.Controls case nameof(BorderThickness): _layoutThickness = null; break; + case nameof(BackgroundSizing): + if (_borderVisual != null) + _borderVisual.BackgroundSizing = BackgroundSizing; + break; case nameof(CornerRadius): if (_borderVisual != null) _borderVisual.CornerRadius = CornerRadius; @@ -215,6 +219,7 @@ namespace Avalonia.Controls { return _borderVisual = new CompositionBorderVisual(compositor, this) { + BackgroundSizing = BackgroundSizing, CornerRadius = CornerRadius }; } diff --git a/src/Avalonia.Controls/BorderVisual.cs b/src/Avalonia.Controls/BorderVisual.cs index d77ff1e6ec..c112a575b3 100644 --- a/src/Avalonia.Controls/BorderVisual.cs +++ b/src/Avalonia.Controls/BorderVisual.cs @@ -15,6 +15,8 @@ class CompositionBorderVisual : CompositionDrawListVisual private bool _cornerRadiusChanged; private Thickness _borderThickness; private bool _borderThicknessChanged; + private BackgroundSizing _backgroundSizing; + private bool _backgroundSizingChanged; public CompositionBorderVisual(Compositor compositor, Visual visual) : base(compositor, new ServerBorderVisual(compositor.Server, visual), visual) @@ -49,6 +51,20 @@ class CompositionBorderVisual : CompositionDrawListVisual } } + public BackgroundSizing BackgroundSizing + { + get => _backgroundSizing; + set + { + if (_backgroundSizing != value) + { + _backgroundSizingChanged = true; + _backgroundSizing = value; + RegisterForSerialization(); + } + } + } + private protected override void SerializeChangesCore(BatchStreamWriter writer) { base.SerializeChangesCore(writer); @@ -58,12 +74,16 @@ class CompositionBorderVisual : CompositionDrawListVisual writer.Write(_borderThicknessChanged); if (_borderThicknessChanged) writer.Write(_borderThickness); + writer.Write(_backgroundSizingChanged); + if (_backgroundSizingChanged) + writer.Write(_backgroundSizing); } class ServerBorderVisual : ServerCompositionDrawListVisual { private CornerRadius _cornerRadius; private Thickness _borderThickness; + private BackgroundSizing _backgroundSizing; public ServerBorderVisual(ServerCompositor compositor, Visual v) : base(compositor, v) { } @@ -79,6 +99,8 @@ class CompositionBorderVisual : CompositionDrawListVisual _cornerRadius = reader.Read(); if (reader.Read()) _borderThickness = reader.Read(); + if (reader.Read()) + _backgroundSizing = reader.Read(); } diff --git a/src/Avalonia.Controls/Presenters/ContentPresenter.cs b/src/Avalonia.Controls/Presenters/ContentPresenter.cs index 2cc5df586d..54bc656398 100644 --- a/src/Avalonia.Controls/Presenters/ContentPresenter.cs +++ b/src/Avalonia.Controls/Presenters/ContentPresenter.cs @@ -447,6 +447,10 @@ namespace Avalonia.Controls.Presenters case nameof(BorderThickness): _layoutThickness = null; break; + case nameof(BackgroundSizing): + if (_borderVisual != null) + _borderVisual.BackgroundSizing = BackgroundSizing; + break; case nameof(CornerRadius): if (_borderVisual != null) _borderVisual.CornerRadius = CornerRadius; @@ -587,6 +591,7 @@ namespace Avalonia.Controls.Presenters { return _borderVisual = new CompositionBorderVisual(compositor, this) { + BackgroundSizing = BackgroundSizing, CornerRadius = CornerRadius }; }