public override object GetValueCore(DependencyObject d, DependencyProperty dp) { if (Root._TemplatedParent == null) throw new NotSupportedException("Template content not apply to any element."); FrameworkElement element = Root._TemplatedParent; if (Property == null) return element; if (Property.Contains(".")) { string[] dop = Property.Split('.'); if (dop.Length != 2) throw new ArgumentException("Property invalid."); Type ownerType = Type.GetType(dop[0]); if (ownerType == null) return null; DependencyProperty property = DependencyProperty.FromName(dop[1], ownerType); return element.GetValue(property); } else { var propertyInfo = element.GetType().GetProperty(Property); if (propertyInfo == null) return null; DependencyProperty property = DependencyProperty.FromName(Property, propertyInfo.DeclaringType); return element.GetValue(property); } }
public virtual object GetValue(DependencyObject d, DependencyProperty dp) { return dp.DefaultMetadata.DefaultValue; }
protected internal override BindingExpressionBase GetExpression(DependencyObject d, DependencyProperty dp, IServiceProvider serviceProvider) { IRootObjectProvider rootProvider = (IRootObjectProvider)serviceProvider.GetService(typeof(IRootObjectProvider)); FrameworkElement root = rootProvider.RootObject as FrameworkElement; return new TemplateBindingExpression(root) { Property = Property }; }