diff --git a/src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoaderPortableXaml.cs b/src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoaderPortableXaml.cs
index f23ce9d8b3..c49797f2f8 100644
--- a/src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoaderPortableXaml.cs
+++ b/src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoaderPortableXaml.cs
@@ -168,7 +168,9 @@ namespace Avalonia.Markup.Xaml
var reader = new XamlXmlReader(stream, _context, readerSettings);
- object result = LoadFromReader(reader, rootInstance, readerSettings);
+ object result = LoadFromReader(
+ reader,
+ AvaloniaXamlContext.For(readerSettings, rootInstance));
var topLevel = result as TopLevel;
@@ -180,13 +182,10 @@ namespace Avalonia.Markup.Xaml
return result;
}
- internal static object LoadFromReader(XamlReader reader,
- object instance,
- AvaloniaXamlContext context = null)
+ internal static object LoadFromReader(XamlReader reader, AvaloniaXamlContext context = null)
{
var writer = AvaloniaXamlObjectWriter.Create(
reader.SchemaContext,
- instance,
context);
XamlServices.Transform(reader, writer);
diff --git a/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlContext.cs b/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlContext.cs
index 7196b841b0..c159b551b7 100644
--- a/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlContext.cs
+++ b/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlContext.cs
@@ -1,24 +1,31 @@
using Portable.Xaml;
+using Portable.Xaml.Markup;
using System;
using System.Reflection;
namespace Avalonia.Markup.Xaml.PortableXaml
{
- public class AvaloniaXamlContext
+ public class AvaloniaXamlContext : IUriContext
{
- internal AvaloniaXamlContext(Uri baseUri, Assembly localAssembly)
+ private AvaloniaXamlContext()
{
- LocalAssembly = localAssembly;
- BaseUri = baseUri;
}
- public Assembly LocalAssembly { get; }
+ public Assembly LocalAssembly { get; private set; }
- public Uri BaseUri { get; }
+ public Uri BaseUri { get; set; }
- public static implicit operator AvaloniaXamlContext(XamlXmlReaderSettings sett)
+ public object RootInstance { get; private set; }
+
+ internal static AvaloniaXamlContext For(XamlXmlReaderSettings sett,
+ object rootInstance)
{
- return new AvaloniaXamlContext(sett.BaseUri, sett.LocalAssembly);
+ return new AvaloniaXamlContext()
+ {
+ BaseUri = sett.BaseUri,
+ LocalAssembly = sett.LocalAssembly,
+ RootInstance = rootInstance
+ };
}
}
}
\ No newline at end of file
diff --git a/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlObjectWriter.cs b/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlObjectWriter.cs
index c011be67cb..ea442cc0ba 100644
--- a/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlObjectWriter.cs
+++ b/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlObjectWriter.cs
@@ -10,16 +10,15 @@ namespace Avalonia.Markup.Xaml.PortableXaml
{
public static AvaloniaXamlObjectWriter Create(
XamlSchemaContext schemaContext,
- object instance,
AvaloniaXamlContext context)
{
- var nameScope = new AvaloniaNameScope { Instance = instance };
+ var nameScope = new AvaloniaNameScope { Instance = context?.RootInstance };
var writerSettings = new XamlObjectWriterSettings()
{
ExternalNameScope = nameScope,
RegisterNamesOnExternalNamescope = true,
- RootObjectInstance = instance
+ RootObjectInstance = context?.RootInstance
};
return new AvaloniaXamlObjectWriter(schemaContext,
diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs
index e002ebc46b..afb8663a78 100644
--- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs
+++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs
@@ -231,21 +231,26 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
[Fact]
public void StyleInclude_Is_Built()
{
- var xaml = @"
+ using (UnitTestApplication.Start(TestServices.StyledWindow
+ .With(theme: () => new Styles())))
+ {
+ var xaml = @"
";
- var window = AvaloniaXamlLoader.Parse(xaml);
+ var window = AvaloniaXamlLoader.Parse(xaml);
- Assert.Equal(1, window.Styles.Count);
+ Assert.Equal(1, window.Styles.Count);
- var styleInclude = window.Styles[0] as StyleInclude;
+ var styleInclude = window.Styles[0] as StyleInclude;
- Assert.NotNull(styleInclude);
- Assert.NotNull(styleInclude.Source);
+ Assert.NotNull(styleInclude);
+ Assert.NotNull(styleInclude.Source);
+ Assert.NotNull(styleInclude.Loaded);
+ }
}
[Fact]