From 46aaadc179ddbd58355525bfcabd8da016b4fa4c Mon Sep 17 00:00:00 2001 From: jogibear9988 Date: Fri, 7 Nov 2014 22:07:53 +0100 Subject: [PATCH] Support for {x:Reference} by implementing on method of IXamlNameResolver --- .../Project/XamlObjectServiceProvider.cs | 57 ++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlObjectServiceProvider.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlObjectServiceProvider.cs index 1b05165a23..3cac378105 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlObjectServiceProvider.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlObjectServiceProvider.cs @@ -29,7 +29,7 @@ namespace ICSharpCode.WpfDesign.XamlDom /// A service provider that provides the IProvideValueTarget and IXamlTypeResolver services. /// No other services (e.g. from the document's service provider) are offered. /// - public class XamlObjectServiceProvider : IServiceProvider, IProvideValueTarget, IXamlSchemaContextProvider, IAmbientProvider + public class XamlObjectServiceProvider : IServiceProvider, IXamlNameResolver, IProvideValueTarget, IXamlSchemaContextProvider, IAmbientProvider { /// /// Creates a new XamlObjectServiceProvider instance. @@ -71,6 +71,11 @@ namespace ICSharpCode.WpfDesign.XamlDom if (serviceType == typeof(IAmbientProvider)) { return this; } + if (serviceType == typeof(IXamlNameResolver)) + { + return this; + } + return null; } @@ -181,5 +186,55 @@ namespace ICSharpCode.WpfDesign.XamlDom } #endregion + + #region IXamlNameResolver + + public object Resolve(string name) + { + INameScope ns = null; + var xamlObj = this.XamlObject; + while (xamlObj != null) + { + ns = NameScopeHelper.GetNameScopeFromObject(xamlObj.Instance); + + if (ns != null) + break; + + xamlObj = xamlObj.ParentObject; + } + + var obj = ns.FindName(name); + + return obj; + } + + public object Resolve(string name, out bool isFullyInitialized) + { + throw new NotImplementedException(); + } + + public object GetFixupToken(IEnumerable names) + { + throw new NotImplementedException(); + } + + public object GetFixupToken(IEnumerable names, bool canAssignDirectly) + { + throw new NotImplementedException(); + } + + public IEnumerable> GetAllNamesAndValuesInScope() + { + throw new NotImplementedException(); + } + + public bool IsFixupTokenAvailable + { + get { throw new NotImplementedException(); } + } + + public event EventHandler OnNameScopeInitializationComplete; + + #endregion } }