diff --git a/samples/ControlCatalog/Pages/CanvasPage.paml b/samples/ControlCatalog/Pages/CanvasPage.paml
index 4a3f682d17..8aaa8176bd 100644
--- a/samples/ControlCatalog/Pages/CanvasPage.paml
+++ b/samples/ControlCatalog/Pages/CanvasPage.paml
@@ -2,12 +2,13 @@
Canvas
A panel which lays out its children by explicit coordinates
-
-
\ No newline at end of file
diff --git a/samples/TestApplicationShared/MainWindow.cs b/samples/TestApplicationShared/MainWindow.cs
index 4fb3099b84..30490f774b 100644
--- a/samples/TestApplicationShared/MainWindow.cs
+++ b/samples/TestApplicationShared/MainWindow.cs
@@ -725,6 +725,10 @@ namespace TestApplication
{
Stroke = Brushes.Brown,
Points = polylinePoints,
+ StrokeThickness = 5,
+ StrokeJoin = PenLineJoin.Round,
+ StrokeStartLineCap = PenLineCap.Triangle,
+ StrokeEndLineCap = PenLineCap.Triangle,
[Canvas.LeftProperty] = 30,
[Canvas.TopProperty] = 350,
},
diff --git a/src/Markup/Perspex.Markup.Xaml/Context/PerspexWiringContext.cs b/src/Markup/Perspex.Markup.Xaml/Context/PerspexWiringContext.cs
index e42df57d59..45e3e7285d 100644
--- a/src/Markup/Perspex.Markup.Xaml/Context/PerspexWiringContext.cs
+++ b/src/Markup/Perspex.Markup.Xaml/Context/PerspexWiringContext.cs
@@ -21,6 +21,7 @@ using Perspex.Media.Imaging;
using Perspex.Metadata;
using Perspex.Platform;
using Perspex.Styling;
+using System.Collections.Generic;
namespace Perspex.Markup.Xaml.Context
{
@@ -101,6 +102,7 @@ namespace Perspex.Markup.Xaml.Context
new TypeConverterRegistration(typeof(PerspexList), new PerspexListTypeConverter()),
new TypeConverterRegistration(typeof(IMemberSelector), new MemberSelectorTypeConverter()),
new TypeConverterRegistration(typeof(Point), new PointTypeConverter()),
+ new TypeConverterRegistration(typeof(IList), new PointsListTypeConverter()),
new TypeConverterRegistration(typeof(PerspexProperty), new PerspexPropertyTypeConverter()),
new TypeConverterRegistration(typeof(RelativePoint), new RelativePointTypeConverter()),
new TypeConverterRegistration(typeof(RelativeRect), new RelativeRectTypeConverter()),
diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/PointsListTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/PointsListTypeConverter.cs
new file mode 100644
index 0000000000..cff7443eff
--- /dev/null
+++ b/src/Markup/Perspex.Markup.Xaml/Converters/PointsListTypeConverter.cs
@@ -0,0 +1,37 @@
+using OmniXaml.TypeConversion;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+
+namespace Perspex.Markup.Xaml.Converters
+{
+ public class PointsListTypeConverter : ITypeConverter
+ {
+ public bool CanConvertFrom(IXamlTypeConverterContext context, Type sourceType)
+ {
+ return sourceType == typeof(string);
+ }
+
+ public bool CanConvertTo(IXamlTypeConverterContext context, Type destinationType)
+ {
+ return false;
+ }
+
+ public object ConvertFrom(IXamlTypeConverterContext context, CultureInfo culture, object value)
+ {
+ string strValue = (string)value;
+ string[] pointStrs = strValue.Split(new[] { ' ', '\t', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
+ var result = new List(pointStrs.Length);
+ foreach (var pointStr in pointStrs)
+ {
+ result.Add(Point.Parse(pointStr, culture));
+ }
+ return result;
+ }
+
+ public object ConvertTo(IXamlTypeConverterContext context, CultureInfo culture, object value, Type destinationType)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj b/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj
index d9cd4c6f63..74cf64f3ec 100644
--- a/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj
+++ b/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj
@@ -41,6 +41,7 @@
+