diff --git a/src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoader.cs b/src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoader.cs index 800afb3976..a1f8bf6cf6 100644 --- a/src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoader.cs +++ b/src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoader.cs @@ -23,13 +23,7 @@ namespace Avalonia.Markup.Xaml /// public class AvaloniaXamlLoader { - private readonly AvaloniaXamlSchemaContext _context = AvaloniaXamlSchemaContext.Create(); - - public bool IsDesignMode - { - get => _context.IsDesignMode; - set => _context.IsDesignMode = value; - } + public bool IsDesignMode { get; set; } /// /// Initializes a new instance of the class. @@ -171,7 +165,8 @@ namespace Avalonia.Markup.Xaml LocalAssembly = localAssembly }; - var reader = new XamlXmlReader(stream, _context, readerSettings); + var context = IsDesignMode ? AvaloniaXamlSchemaContext.DesignInstance : AvaloniaXamlSchemaContext.Instance; + var reader = new XamlXmlReader(stream, context, readerSettings); object result = LoadFromReader( reader, diff --git a/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlSchemaContext.cs b/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlSchemaContext.cs index 9a493a85c0..326db884a6 100644 --- a/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlSchemaContext.cs +++ b/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlSchemaContext.cs @@ -1,21 +1,48 @@ -using Avalonia.Data; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using Avalonia.Data; using Avalonia.Markup.Xaml.Context; -using Avalonia.Markup.Data; using Avalonia.Markup.Xaml.MarkupExtensions; using Avalonia.Markup.Xaml.Styling; using Portable.Xaml; -using Portable.Xaml.ComponentModel; -using System.ComponentModel; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; namespace Avalonia.Markup.Xaml.PortableXaml { internal class AvaloniaXamlSchemaContext : XamlSchemaContext { - public bool IsDesignMode { get; set; } + private static AvaloniaXamlSchemaContext s_instance; + private static AvaloniaXamlSchemaContext s_designInstance; + + public static AvaloniaXamlSchemaContext Instance + { + get + { + if (s_instance == null) + { + s_instance = Create(); + } + + return s_instance; + } + } + + public static AvaloniaXamlSchemaContext DesignInstance + { + get + { + if (s_designInstance == null) + { + s_designInstance = Create(); + s_designInstance.IsDesignMode = true; + } + + return s_designInstance; + } + } + + public bool IsDesignMode { get; private set; } public static AvaloniaXamlSchemaContext Create(IRuntimeTypeProvider typeProvider = null) { return new AvaloniaXamlSchemaContext(typeProvider ?? new AvaloniaRuntimeTypeProvider());