PerspexObjectAssembler.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // Copyright (c) The Perspex Project. All rights reserved.
  2. // Licensed under the MIT license. See licence.md file in the project root for full license information.
  3. using System;
  4. using OmniXaml;
  5. using OmniXaml.ObjectAssembler;
  6. using Perspex.Controls;
  7. using Perspex.Markup.Xaml.Templates;
  8. namespace Perspex.Markup.Xaml.Context
  9. {
  10. public class PerspexObjectAssembler : IObjectAssembler
  11. {
  12. private readonly TemplateHostingObjectAssembler _objectAssembler;
  13. public PerspexObjectAssembler(IWiringContext wiringContext, ObjectAssemblerSettings objectAssemblerSettings = null)
  14. {
  15. var mapping = new DeferredLoaderMapping();
  16. mapping.Map<ControlTemplate>(x => x.Content, new TemplateLoader());
  17. mapping.Map<DataTemplate>(x => x.Content, new TemplateLoader());
  18. mapping.Map<FocusAdornerTemplate>(x => x.Content, new TemplateLoader());
  19. mapping.Map<TreeDataTemplate>(x => x.Content, new TemplateLoader());
  20. mapping.Map<ItemsPanelTemplate>(x => x.Content, new TemplateLoader());
  21. var assembler = new ObjectAssembler(wiringContext, new TopDownValueContext(), objectAssemblerSettings);
  22. _objectAssembler = new TemplateHostingObjectAssembler(assembler, mapping);
  23. }
  24. public object Result => _objectAssembler.Result;
  25. public InstanceLifeCycleHandler InstanceLifeCycleHandler { get; set; } = new InstanceLifeCycleHandler();
  26. public EventHandler<XamlSetValueEventArgs> XamlSetValueHandler { get; set; }
  27. public IWiringContext WiringContext => _objectAssembler.WiringContext;
  28. public void Process(XamlInstruction node)
  29. {
  30. _objectAssembler.Process(node);
  31. }
  32. public void OverrideInstance(object instance)
  33. {
  34. _objectAssembler.OverrideInstance(instance);
  35. }
  36. }
  37. }