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);
     }
 }
Example #2
0
 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 };
 }