diff --git a/src/Avalonia.Base/RelativePoint.cs b/src/Avalonia.Base/RelativePoint.cs
index 4550dbd54b..e1fd0093b6 100644
--- a/src/Avalonia.Base/RelativePoint.cs
+++ b/src/Avalonia.Base/RelativePoint.cs
@@ -1,7 +1,8 @@
using System;
using System.Globalization;
-
+#if !BUILDTASK
using Avalonia.Animation.Animators;
+#endif
using Avalonia.Utilities;
namespace Avalonia
@@ -10,7 +11,10 @@ namespace Avalonia
/// Defines the reference point units of an or
/// .
///
- public enum RelativeUnit
+#if !BUILDTASK
+ public
+#endif
+ enum RelativeUnit
{
///
/// The point is expressed as a fraction of the containing element's size.
@@ -26,7 +30,10 @@ namespace Avalonia
///
/// Defines a point that may be defined relative to a containing element.
///
- public readonly struct RelativePoint : IEquatable
+#if !BUILDTASK
+ public
+#endif
+ readonly struct RelativePoint : IEquatable
{
///
/// A point at the top left of the containing element.
@@ -49,7 +56,9 @@ namespace Avalonia
static RelativePoint()
{
+#if !BUILDTASK
Animation.Animation.RegisterAnimator(prop => typeof(RelativePoint).IsAssignableFrom(prop.PropertyType));
+#endif
}
///
diff --git a/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj b/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj
index 6267c74df9..e9b99c9aa8 100644
--- a/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj
+++ b/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj
@@ -95,6 +95,9 @@
Markup/%(RecursiveDir)%(FileName)%(Extension)
+
+ Markup/%(RecursiveDir)%(FileName)%(Extension)
+
diff --git a/src/Avalonia.Build.Tasks/Properties/launchSettings.json b/src/Avalonia.Build.Tasks/Properties/launchSettings.json
new file mode 100644
index 0000000000..e9f5af46d6
--- /dev/null
+++ b/src/Avalonia.Build.Tasks/Properties/launchSettings.json
@@ -0,0 +1,10 @@
+{
+ "$schema": "http://json.schemastore.org/launchsettings.json",
+ "profiles": {
+ "Compile Sandbox": {
+ "commandName": "Project",
+ "executablePath": "$(SolutionDir)\\src\\Avalonia.Build.Tasks\\bin\\Debug\\net6.0\\Avalonia.Build.Tasks.exe",
+ "commandLineArgs": "$(SolutionDir)\\samples\\Sandbox\\obj\\Debug\\net6.0\\Avalonia\\original.dll $(SolutionDir)\\samples\\Sandbox\\bin\\Debug\\net6.0\\Sandbox.dll.refs $(SolutionDir)\\out.dll"
+ }
+ }
+}
diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs
index 88529ae3a0..d907bcbef9 100644
--- a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs
+++ b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs
@@ -160,6 +160,29 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions
return true;
}
+ if (type.Equals(types.RelativePoint))
+ {
+ try
+ {
+ var relativePoint = RelativePoint.Parse(text);
+
+ var relativePointTypeRef = new XamlAstClrTypeReference(node, types.RelativePoint, false);
+
+ result = new XamlAstNewClrObjectNode(node, relativePointTypeRef, types.RelativePointFullConstructor, new List
+ {
+ new XamlConstantNode(node, types.XamlIlTypes.Double, relativePoint.Point.X),
+ new XamlConstantNode(node, types.XamlIlTypes.Double, relativePoint.Point.Y),
+ new XamlConstantNode(node, types.RelativeUnit, (int) relativePoint.Unit),
+ });
+
+ return true;
+ }
+ catch
+ {
+ throw new XamlX.XamlLoadException($"Unable to parse \"{text}\" as a relative point", node);
+ }
+ }
+
if (type.Equals(types.GridLength))
{
try
diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlWellKnownTypes.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlWellKnownTypes.cs
index 99072ace02..76f3cc071f 100644
--- a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlWellKnownTypes.cs
+++ b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlWellKnownTypes.cs
@@ -71,6 +71,9 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers
public IXamlConstructor MatrixFullConstructor { get; }
public IXamlType CornerRadius { get; }
public IXamlConstructor CornerRadiusFullConstructor { get; }
+ public IXamlType RelativeUnit { get; }
+ public IXamlType RelativePoint { get; }
+ public IXamlConstructor RelativePointFullConstructor { get; }
public IXamlType GridLength { get; }
public IXamlConstructor GridLengthConstructorValueType { get; }
public IXamlType Color { get; }
@@ -175,6 +178,10 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers
(Matrix, MatrixFullConstructor) = GetNumericTypeInfo("Avalonia.Matrix", XamlIlTypes.Double, 6);
(CornerRadius, CornerRadiusFullConstructor) = GetNumericTypeInfo("Avalonia.CornerRadius", XamlIlTypes.Double, 4);
+ RelativeUnit = cfg.TypeSystem.GetType("Avalonia.RelativeUnit");
+ RelativePoint = cfg.TypeSystem.GetType("Avalonia.RelativePoint");
+ RelativePointFullConstructor = RelativePoint.GetConstructor(new List { XamlIlTypes.Double, XamlIlTypes.Double, RelativeUnit });
+
GridLength = cfg.TypeSystem.GetType("Avalonia.Controls.GridLength");
GridLengthConstructorValueType = GridLength.GetConstructor(new List { XamlIlTypes.Double, cfg.TypeSystem.GetType("Avalonia.Controls.GridUnitType") });
Color = cfg.TypeSystem.GetType("Avalonia.Media.Color");