Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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;
        }