/// <inheritdoc /> /// <summary> /// When implemented in a derived class, returns an object that is provided as the value of the target property for this markup extension. /// </summary> /// <param name="serviceProvider">A service provider helper that can provide services for the markup extension.</param> /// <returns> /// The object value to set on the property where the extension is applied. /// </returns> public override object ProvideValue(IServiceProvider serviceProvider) { Contract.Assume(serviceProvider != null); var rootObjectProvider = serviceProvider.GetService <IRootObjectProvider>(); if (rootObjectProvider == null) { return(null); } _rootObject = rootObjectProvider.RootObject as DependencyObject; if (_rootObject == null) { return(null); } if (DesignerProperties.GetIsInDesignMode(_rootObject)) { return(null); } if (AllowRecomposition) { var provideValueTarget = serviceProvider.GetService <IProvideValueTarget>(); if (provideValueTarget != null) { _targetObject = provideValueTarget.TargetObject; _targetProperty = provideValueTarget.TargetProperty; } _tracker = _rootObject.Track(ExportProviderLocator.ExportProviderProperty); _tracker.Changed += (_, __) => ExportProvider_Changed(); RegisterForChangeEvents(); } else { _exportProvider = _rootObject.GetExportProvider(); } return(Value); }
/// <inheritdoc /> /// <summary> /// When implemented in a derived class, returns an object that is provided as the value of the target property for this markup extension. /// </summary> /// <param name="serviceProvider">A service provider helper that can provide services for the markup extension.</param> /// <returns> /// The object value to set on the property where the extension is applied. /// </returns> public override object ProvideValue(IServiceProvider serviceProvider) { var rootObjectProvider = serviceProvider.GetService <IRootObjectProvider>(); if (rootObjectProvider == null) { return(null); } _rootObject = rootObjectProvider.RootObject as FrameworkElement; if (_rootObject == null) { return(null); } if (DesignerProperties.GetIsInDesignMode(_rootObject)) { return(null); } if (AllowRecomposition) { var provideValueTarget = serviceProvider.GetService <IProvideValueTarget>(); if (provideValueTarget != null) { _targetObject = provideValueTarget.TargetObject; _targetProperty = provideValueTarget.TargetProperty; } _tracker = _rootObject.Track(ExportProviderLocator.ExportProviderProperty); _rootObject.Loaded += RootObject_Loaded; _rootObject.Unloaded += RootObject_Unloaded; } else { _exportProvider = _rootObject.GetExportProvider(); } return(Value); }
/// <summary> /// When implemented in a derived class, returns an object that is provided as the value of the target property for this markup extension. /// </summary> /// <param name="serviceProvider">A service provider helper that can provide services for the markup extension.</param> /// <returns> /// The object value to set on the property where the extension is applied. /// </returns> public override object ProvideValue(IServiceProvider serviceProvider) { Contract.Assume(serviceProvider != null); var rootObjectProvider = serviceProvider.GetService<IRootObjectProvider>(); if (rootObjectProvider == null) return null; _rootObject = rootObjectProvider.RootObject as DependencyObject; if (_rootObject == null) return null; if (DesignerProperties.GetIsInDesignMode(_rootObject)) return null; if (AllowRecomposition) { var provideValueTarget = serviceProvider.GetService<IProvideValueTarget>(); if (provideValueTarget != null) { _targetObject = provideValueTarget.TargetObject; _targetProperty = provideValueTarget.TargetProperty; } _tracker = _rootObject.Track(ExportProviderLocator.ExportProviderProperty); _tracker.Changed += (_, __) => ExportProvider_Changed(); RegisterForChangeEvents(); } else { _exportProvider = _rootObject.GetExportProvider(); } return Value; }