diff --git a/src/Avalonia.Base/Avalonia.Base.csproj b/src/Avalonia.Base/Avalonia.Base.csproj
index acc4145dc5..7cfb6e2123 100644
--- a/src/Avalonia.Base/Avalonia.Base.csproj
+++ b/src/Avalonia.Base/Avalonia.Base.csproj
@@ -70,6 +70,7 @@
+
diff --git a/src/Avalonia.Base/Metadata/AmbientAttribute.cs b/src/Avalonia.Base/Metadata/AmbientAttribute.cs
new file mode 100644
index 0000000000..db36953300
--- /dev/null
+++ b/src/Avalonia.Base/Metadata/AmbientAttribute.cs
@@ -0,0 +1,15 @@
+// Copyright (c) The Avalonia Project. All rights reserved.
+// Licensed under the MIT license. See licence.md file in the project root for full license information.
+
+using System;
+
+namespace Avalonia.Metadata
+{
+ ///
+ /// Defines the ambient class/property
+ ///
+ [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property, Inherited = true)]
+ public class AmbientAttribute : Attribute
+ {
+ }
+}
diff --git a/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj b/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj
index 0b71cb23be..a3b5b4ea40 100644
--- a/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj
+++ b/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj
@@ -52,6 +52,8 @@
+
+
diff --git a/src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoaderPortableXaml.cs b/src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoaderPortableXaml.cs
index aac2951deb..8dbfc34756 100644
--- a/src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoaderPortableXaml.cs
+++ b/src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoaderPortableXaml.cs
@@ -1,17 +1,17 @@
// Copyright (c) The Avalonia 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.IO;
-using System.Reflection;
-using System.Text;
using Avalonia.Controls;
using Avalonia.Markup.Xaml.Context;
using Avalonia.Markup.Xaml.Data;
using Avalonia.Markup.Xaml.PortableXaml;
using Avalonia.Platform;
using Portable.Xaml;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+using System.Text;
namespace Avalonia.Markup.Xaml
{
@@ -88,7 +88,14 @@ namespace Avalonia.Markup.Xaml
{
var initialize = rootInstance as ISupportInitialize;
initialize?.BeginInit();
- return Load(stream, type, rootInstance, uri);
+ try
+ {
+ return Load(stream, type, rootInstance, uri);
+ }
+ finally
+ {
+ initialize?.EndInit();
+ }
}
}
}
@@ -197,16 +204,17 @@ namespace Avalonia.Markup.Xaml
internal static object LoadFromReader(XamlReader reader, object instance)
{
- var writer = AvaloniaXamlObjectWriter.Create(_context, instance);
+ var writer = AvaloniaXamlObjectWriter.Create(reader.SchemaContext, instance);
- XamlServices.Transform(reader, writer);
+ XamlServices.Transform(reader, writer);
- return writer.Result;
+ return writer.Result;
}
internal static object LoadFromReader(XamlReader reader)
{
- return XamlServices.Load(reader);
+ //return XamlServices.Load(reader);
+ return LoadFromReader(reader, null);
}
///
diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/AvaloniaPropertyTypeConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/AvaloniaPropertyTypeConverter.cs
index ef757f61ac..c5d0c9d1da 100644
--- a/src/Markup/Avalonia.Markup.Xaml/Converters/AvaloniaPropertyTypeConverter.cs
+++ b/src/Markup/Avalonia.Markup.Xaml/Converters/AvaloniaPropertyTypeConverter.cs
@@ -33,10 +33,7 @@ namespace Avalonia.Markup.Xaml.Converters
if (typeName == null)
{
- var amb = context.GetService();
- var sc = context.GetService().SchemaContext;
- var xamlStyleType = sc.GetXamlType(typeof(Style));
- var style = amb.GetFirstAmbientValue(xamlStyleType) as Style;
+ var style = context.GetFirstAmbientValue