Exemple #1
0
 public ViewsService(DependencyObjectProvider mainWindowProvider)
 {
     _mainWindowProvider = mainWindowProvider;
 }
 public ContentFrameNavigationService(DependencyObject host)
 {
     _host      = new DependencyObjectProvider(() => host);
     _frameName = null;
 }
        /// <summary>
        ///     Static method that returns a DependencyPropertyDescriptor from a DependencyProperty.  The
        ///     DependencyProperty may refer to either a direct or attached property.  The targetType is the
        ///     type of object to associate with the property:  either the owner type for a direct property
        ///     or the type of object to attach to for an attached property.
        /// </summary>
        public static DependencyPropertyDescriptor FromProperty(DependencyProperty dependencyProperty, Type targetType)
        {
            if (dependencyProperty == null)
            {
                throw new ArgumentNullException("dependencyProperty");
            }
            if (targetType == null)
            {
                throw new ArgumentNullException("targetType");
            }

            // We have a different codepath here for attached and direct
            // properties.  For direct properties, we route through Type
            // Descriptor because we need the underlying CLR property descriptor
            // to create our wrapped property.  For attached properties, all we
            // need is the dp and the object type and we can create an attached
            // property descriptor based on that.  We must special case attached
            // properties here because TypeDescriptor will only return attached
            // properties for instances, not types.

            DependencyPropertyDescriptor dpd    = null;
            DependencyPropertyKind       dpKind = DependencyObjectProvider.GetDependencyPropertyKind(dependencyProperty, targetType);

            if (dpKind.IsDirect)
            {
                // For direct properties we don't want to get the property descriptor
                // yet because it is very expensive.  Delay it until needed.

                lock (_cache)
                {
                    _cache.TryGetValue(dependencyProperty, out dpd);
                }

                if (dpd == null)
                {
                    // Create a new DPD based on the type information we have.  It
                    // will fill in the property descriptor by calling TypeDescriptor
                    // when needed.

                    dpd = new DependencyPropertyDescriptor(null, dependencyProperty.Name, targetType, dependencyProperty, false);

                    lock (_cache)
                    {
                        _cache[dependencyProperty] = dpd;
                    }
                }
            }
            else if (!dpKind.IsInternal)
            {
                // If it isn't a direct property, we treat it as attached unless it is internal.
                // We should never release internal properties to the user

                PropertyDescriptor prop = DependencyObjectProvider.GetAttachedPropertyDescriptor(dependencyProperty, targetType);
                if (prop != null)
                {
                    dpd = FromProperty(prop);
                }
            }

            return(dpd);
        }
 public ContentFrameNavigationService(DependencyObjectProvider host, string frameName)
 {
     _host      = host;
     _frameName = frameName;
 }