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