diff --git a/src/Avalonia/HandyControl_Avalonia/Controls/Other/DashedBorder.cs b/src/Avalonia/HandyControl_Avalonia/Controls/Other/DashedBorder.cs index 68768170..e3bd4363 100644 --- a/src/Avalonia/HandyControl_Avalonia/Controls/Other/DashedBorder.cs +++ b/src/Avalonia/HandyControl_Avalonia/Controls/Other/DashedBorder.cs @@ -52,6 +52,7 @@ public class DashedBorder : Decorator BorderDashThicknessProperty, BorderThicknessProperty ); + AffectsRender( BorderDashArrayProperty, BorderDashCapProperty, @@ -60,6 +61,26 @@ public class DashedBorder : Decorator BorderBrushProperty, BackgroundProperty ); + + BorderThicknessProperty.Changed.AddClassHandler(OnClearPenCache); + BorderDashThicknessProperty.Changed.AddClassHandler(OnClearPenCache); + BorderBrushProperty.Changed.AddClassHandler(OnClearPenCache); + BackgroundProperty.Changed.AddClassHandler(OnClearPenCache); + BorderDashArrayProperty.Changed.AddClassHandler(OnClearPenCache); + BorderDashCapProperty.Changed.AddClassHandler(OnClearPenCache); + BorderDashOffsetProperty.Changed.AddClassHandler(OnClearPenCache); + } + + private static void OnClearPenCache(AvaloniaObject d, AvaloniaPropertyChangedEventArgs e) + { + var border = (DashedBorder)d; + border._leftPenCache = null; + border._rightPenCache = null; + border._topPenCache = null; + border._bottomPenCache = null; + border._geometryPenCache = null; + border._backgroundGeometryCache = null; + border._borderGeometryCache = null; } public double BorderDashThickness @@ -145,34 +166,6 @@ public class DashedBorder : Decorator _layoutThickness = new Thickness?(); } - protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) - { - base.OnPropertyChanged(change); - - string propertyName = change.Property.Name; - if (string.Equals(propertyName, nameof(BorderThickness)) || - string.Equals(propertyName, nameof(BorderDashThickness)) || - string.Equals(propertyName, nameof(BorderBrush)) || - string.Equals(propertyName, nameof(Background)) || - string.Equals(propertyName, nameof(BorderDashArray)) || - string.Equals(propertyName, nameof(BorderDashCap)) || - string.Equals(propertyName, nameof(BorderDashOffset))) - { - ClearCache(); - } - } - - private void ClearCache() - { - _leftPenCache = null; - _rightPenCache = null; - _topPenCache = null; - _bottomPenCache = null; - _geometryPenCache = null; - _backgroundGeometryCache = null; - _borderGeometryCache = null; - } - public override void Render(DrawingContext context) { var radii = CornerRadius; diff --git a/src/Avalonia/HandyControl_Avalonia/Controls/Panel/UniformSpacingPanel.cs b/src/Avalonia/HandyControl_Avalonia/Controls/Panel/UniformSpacingPanel.cs index 94e28e34..d7bc2bbb 100644 --- a/src/Avalonia/HandyControl_Avalonia/Controls/Panel/UniformSpacingPanel.cs +++ b/src/Avalonia/HandyControl_Avalonia/Controls/Panel/UniformSpacingPanel.cs @@ -59,6 +59,14 @@ public class UniformSpacingPanel : Panel ItemHorizontalAlignmentProperty, ItemVerticalAlignmentProperty ); + + OrientationProperty.Changed.AddClassHandler(OnOrientationChanged); + } + + private static void OnOrientationChanged(AvaloniaObject d, AvaloniaPropertyChangedEventArgs e) + { + var p = (UniformSpacingPanel)d; + p._orientation = e.GetNewValue(); } public Orientation Orientation @@ -117,16 +125,6 @@ public class UniformSpacingPanel : Panel private static double CoerceLength(AvaloniaObject _, double length) => length < 0 ? 0 : length; - protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) - { - base.OnPropertyChanged(change); - - if (string.Equals(change.Property.Name, nameof(Orientation))) - { - _orientation = change.GetNewValue(); - } - } - protected override Size MeasureOverride(Size availableSize) { var curLineSize = new PanelUvSize(_orientation);