Catel.Windows.Markup.UpdatableMarkupExtension.ProvideValue C# (CSharp) Метод

ProvideValue() публичный закрытый Метод

When implemented in a derived class, returns an object that is provided as the value of the target property for this markup extension.
public final ProvideValue ( IServiceProvider serviceProvider ) : object
serviceProvider IServiceProvider A service provider helper that can provide services for the markup extension.
Результат object
        public override sealed object ProvideValue(IServiceProvider serviceProvider)
        {
#if WINDOWS_PHONE || NETFX_CORE
            _targetObject = null;
            _targetProperty = null;
            _serviceProvider = null;
#else
            _serviceProvider = serviceProvider;

            var target = serviceProvider.GetService(typeof(IProvideValueTarget)) as IProvideValueTarget;
            if (target != null)
            {
                // CTL-636
                // In a template the TargetObject is a SharedDp (internal WPF class)
                // In that case, the markup extension itself is returned to be re-evaluated later
                var targetObjectType = target.TargetObject.GetType();
                if (string.Equals(targetObjectType.FullName, "System.Windows.SharedDp")) 
                    // Checking for setter crashes other extensions (such as FontImage in Orchestra)
                    //string.Equals(targetObjectType.FullName, "System.Windows.Setter"))
                {
                    return this;
                }

                _targetObject = target.TargetObject;
                _targetProperty = target.TargetProperty;

                FrameworkElement frameworkElement;
#if !SILVERLIGHT && !NETFX_CORE
                FrameworkContentElement frameworkContentElement;
#endif

                if ((frameworkElement = _targetObject as FrameworkElement) != null)
                {
#if NET
                    _isFrameworkElementLoaded = frameworkElement.IsLoaded;
#endif

                    frameworkElement.Loaded += OnTargetObjectLoadedInternal;
                    frameworkElement.Unloaded += OnTargetObjectUnloadedInternal;
                }
#if !SILVERLIGHT && !NETFX_CORE
                else if ((frameworkContentElement = _targetObject as FrameworkContentElement) != null)
                {
                    _isFrameworkElementLoaded = frameworkContentElement.IsLoaded;

                    frameworkContentElement.Loaded += OnTargetObjectLoadedInternal;
                    frameworkContentElement.Unloaded += OnTargetObjectUnloadedInternal;
                }
#endif
            }
#endif

            var value = GetValue();
            return value;
        }