diff --git a/src/Perspex.Controls/Shapes/Polygon.cs b/src/Perspex.Controls/Shapes/Polygon.cs index 99aab8a59c..4ff24d060f 100644 --- a/src/Perspex.Controls/Shapes/Polygon.cs +++ b/src/Perspex.Controls/Shapes/Polygon.cs @@ -1,11 +1,7 @@ // Copyright (c) The Perspex Project. All rights reserved. // Licensed under the MIT license. See licence.md file in the project root for full license information. -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Perspex.Media; namespace Perspex.Controls.Shapes @@ -15,12 +11,36 @@ namespace Perspex.Controls.Shapes public static readonly StyledProperty> PointsProperty = PerspexProperty.Register>("Points"); + private Geometry _geometry; + + static Polygon() + { + PointsProperty.Changed.AddClassHandler(x => x.PointsChanged); + } + + public override Geometry DefiningGeometry + { + get + { + if (_geometry == null) + { + _geometry = new PolylineGeometry(Points, true); + } + + return _geometry; + } + } + public IList Points { get { return GetValue(PointsProperty); } set { SetValue(PointsProperty, value); } } - public override Geometry DefiningGeometry => new PolylineGeometry(Points, true); + private void PointsChanged(PerspexPropertyChangedEventArgs e) + { + _geometry = null; + InvalidateMeasure(); + } } } diff --git a/src/Perspex.Controls/Shapes/Polyline.cs b/src/Perspex.Controls/Shapes/Polyline.cs index cac26ee873..eb0426b77b 100644 --- a/src/Perspex.Controls/Shapes/Polyline.cs +++ b/src/Perspex.Controls/Shapes/Polyline.cs @@ -1,11 +1,7 @@ // Copyright (c) The Perspex Project. All rights reserved. // Licensed under the MIT license. See licence.md file in the project root for full license information. -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Perspex.Media; namespace Perspex.Controls.Shapes @@ -15,9 +11,25 @@ namespace Perspex.Controls.Shapes public static readonly StyledProperty> PointsProperty = PerspexProperty.Register>("Points"); + private Geometry _geometry; + static Polyline() { StrokeThicknessProperty.OverrideDefaultValue(1); + PointsProperty.Changed.AddClassHandler(x => x.PointsChanged); + } + + public override Geometry DefiningGeometry + { + get + { + if (_geometry == null) + { + _geometry = new PolylineGeometry(Points, false); + } + + return _geometry; + } } public IList Points @@ -26,6 +38,10 @@ namespace Perspex.Controls.Shapes set { SetValue(PointsProperty, value); } } - public override Geometry DefiningGeometry => new PolylineGeometry(Points, false); + private void PointsChanged(PerspexPropertyChangedEventArgs e) + { + _geometry = null; + InvalidateMeasure(); + } } }