diff --git a/packages/Avalonia/AvaloniaBuildTasks.targets b/packages/Avalonia/AvaloniaBuildTasks.targets
index 1f56bba3bd..961992ebbc 100644
--- a/packages/Avalonia/AvaloniaBuildTasks.targets
+++ b/packages/Avalonia/AvaloniaBuildTasks.targets
@@ -44,7 +44,17 @@
$(BuildAvaloniaResourcesDependsOn);AddAvaloniaResources;ResolveReferences;_GenerateAvaloniaResourcesDependencyCache
-
+
+
+
+
+ <_Parameter1>AvaloniaUseCompiledBindingsByDefault
+ <_Parameter2>$(AvaloniaUseCompiledBindingsByDefault)
+
+
+
+
diff --git a/src/Avalonia.DesignerSupport/DesignWindowLoader.cs b/src/Avalonia.DesignerSupport/DesignWindowLoader.cs
index 811f9c7baa..1e1b550a15 100644
--- a/src/Avalonia.DesignerSupport/DesignWindowLoader.cs
+++ b/src/Avalonia.DesignerSupport/DesignWindowLoader.cs
@@ -35,7 +35,16 @@ namespace Avalonia.DesignerSupport
}
var localAsm = assemblyPath != null ? Assembly.LoadFile(Path.GetFullPath(assemblyPath)) : null;
- var loaded = loader.Load(stream, localAsm, null, baseUri, true);
+ var useCompiledBindings = localAsm?.GetCustomAttributes()
+ .FirstOrDefault(a => a.Key == "AvaloniaUseCompiledBindingsByDefault")?.Value;
+
+ var loaded = loader.Load(stream, new RuntimeXamlLoaderConfiguration
+ {
+ LocalAssembly = localAsm,
+ BaseUri = baseUri,
+ DesignMode = true,
+ UseCompiledBindingsByDefault = bool.TryParse(useCompiledBindings, out var tempBool) && tempBool
+ });
var style = loaded as IStyle;
var resources = loaded as ResourceDictionary;
if (style != null)
diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/AvaloniaRuntimeXamlLoader.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/AvaloniaRuntimeXamlLoader.cs
index 65baa8c486..c8464d83af 100644
--- a/src/Markup/Avalonia.Markup.Xaml.Loader/AvaloniaRuntimeXamlLoader.cs
+++ b/src/Markup/Avalonia.Markup.Xaml.Loader/AvaloniaRuntimeXamlLoader.cs
@@ -88,34 +88,4 @@ namespace Avalonia.Markup.Xaml
=> (T)Parse(xaml, localAssembly);
}
-
- public class RuntimeXamlLoaderConfiguration
- {
- ///
- /// The URI of the XAML being loaded.
- ///
- public Uri? BaseUri { get; set; }
-
- ///
- /// Default assembly for clr-namespace:.
- ///
- public Assembly LocalAssembly { get; set; }
-
- ///
- /// The optional instance into which the XAML should be loaded.
- ///
- public object? RootInstance { get; set; }
-
- ///
- /// Defines is CompiledBinding should be used by default.
- /// Default is 'false'.
- ///
- public bool UseCompiledBindingsByDefault { get; set; } = false;
-
- ///
- /// Indicates whether the XAML is being loaded in design mode.
- /// Default is 'false'.
- ///
- public bool DesignMode { get; set; } = false;
- }
}
diff --git a/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj b/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj
index f5bf14c2a4..070f0c1cc3 100644
--- a/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj
+++ b/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj
@@ -44,6 +44,7 @@
+
diff --git a/src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoader.cs b/src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoader.cs
index e5c6b72d12..578af64abb 100644
--- a/src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoader.cs
+++ b/src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoader.cs
@@ -1,8 +1,5 @@
using System;
using System.IO;
-using System.Reflection;
-using System.Text;
-using Avalonia.Markup.Xaml.XamlIl;
using Avalonia.Platform;
namespace Avalonia.Markup.Xaml
@@ -14,7 +11,7 @@ namespace Avalonia.Markup.Xaml
{
public interface IRuntimeXamlLoader
{
- object Load(Stream stream, Assembly localAsm, object o, Uri baseUri, bool designMode);
+ object Load(Stream stream, RuntimeXamlLoaderConfiguration configuration);
}
///
@@ -67,7 +64,11 @@ namespace Avalonia.Markup.Xaml
using (var stream = asset.stream)
{
var absoluteUri = uri.IsAbsoluteUri ? uri : new Uri(baseUri, uri);
- return runtimeLoader.Load(stream, asset.assembly, null, absoluteUri, false);
+ return runtimeLoader.Load(stream, new RuntimeXamlLoaderConfiguration
+ {
+ LocalAssembly = asset.assembly,
+ BaseUri = absoluteUri
+ });
}
}
diff --git a/src/Markup/Avalonia.Markup.Xaml/RuntimeXamlLoaderConfiguration.cs b/src/Markup/Avalonia.Markup.Xaml/RuntimeXamlLoaderConfiguration.cs
new file mode 100644
index 0000000000..aae19e67a6
--- /dev/null
+++ b/src/Markup/Avalonia.Markup.Xaml/RuntimeXamlLoaderConfiguration.cs
@@ -0,0 +1,34 @@
+using System;
+using System.Reflection;
+
+namespace Avalonia.Markup.Xaml;
+
+public class RuntimeXamlLoaderConfiguration
+{
+ ///
+ /// The URI of the XAML being loaded.
+ ///
+ public Uri? BaseUri { get; set; }
+
+ ///
+ /// Default assembly for clr-namespace:.
+ ///
+ public Assembly LocalAssembly { get; set; }
+
+ ///
+ /// The optional instance into which the XAML should be loaded.
+ ///
+ public object? RootInstance { get; set; }
+
+ ///
+ /// Defines is CompiledBinding should be used by default.
+ /// Default is 'false'.
+ ///
+ public bool UseCompiledBindingsByDefault { get; set; } = false;
+
+ ///
+ /// Indicates whether the XAML is being loaded in design mode.
+ /// Default is 'false'.
+ ///
+ public bool DesignMode { get; set; } = false;
+}
diff --git a/src/tools/Avalonia.Designer.HostApp/DesignXamlLoader.cs b/src/tools/Avalonia.Designer.HostApp/DesignXamlLoader.cs
index 7af29a56a1..7009151998 100644
--- a/src/tools/Avalonia.Designer.HostApp/DesignXamlLoader.cs
+++ b/src/tools/Avalonia.Designer.HostApp/DesignXamlLoader.cs
@@ -8,9 +8,11 @@ namespace Avalonia.Designer.HostApp
{
class DesignXamlLoader : AvaloniaXamlLoader.IRuntimeXamlLoader
{
- public object Load(Stream stream, Assembly localAsm, object o, Uri baseUri, bool designMode)
+ public object Load(Stream stream, RuntimeXamlLoaderConfiguration configuration)
{
- return AvaloniaXamlIlRuntimeCompiler.Load(stream, localAsm, o, baseUri, designMode);
+ return AvaloniaXamlIlRuntimeCompiler.Load(stream,
+ configuration.LocalAssembly, configuration.RootInstance, configuration.BaseUri,
+ configuration.DesignMode, configuration.UseCompiledBindingsByDefault);
}
}
}
diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/XamlTestBase.cs b/tests/Avalonia.Markup.Xaml.UnitTests/XamlTestBase.cs
index 2bc82d1353..2fc4867b35 100644
--- a/tests/Avalonia.Markup.Xaml.UnitTests/XamlTestBase.cs
+++ b/tests/Avalonia.Markup.Xaml.UnitTests/XamlTestBase.cs
@@ -20,8 +20,8 @@ namespace Avalonia.Markup.Xaml.UnitTests
class TestXamlLoaderShim : AvaloniaXamlLoader.IRuntimeXamlLoader
{
- public object Load(Stream stream, Assembly localAsm, object o, Uri baseUri, bool designMode)
- => AvaloniaRuntimeXamlLoader.Load(stream, localAsm, o, baseUri, designMode);
+ public object Load(Stream stream, RuntimeXamlLoaderConfiguration configuration)
+ => AvaloniaRuntimeXamlLoader.Load(stream, configuration);
}
}
}