获取附加属性“Canvas.Left”

时间:2012-07-18 07:05:06

标签: c# attached-properties getproperty

我有以下代码:

this.Object.GetType().GetProperty(this.PropertyName).GetValue(this.Object, null);

PropertyName是一个字符串,包含我想要获取的属性的名称。这适用于“普通”属性,但我无法获得“Canvas.LeftProperty”或“Canvas.TopProperty”。

任何人都可以帮助我吗?

谢谢, 克里斯

1 个答案:

答案 0 :(得分:1)

我认为这是因为Canvas.Left是附加属性并且要检索它们试试这个:

private DependencyProperty GetAttachedProperty(DependencyObject obj, string propertyName, Type ownerType)
{

    foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(obj,
        new Attribute[] { new PropertyFilterAttribute(PropertyFilterOptions.All) }))
    {
        DependencyPropertyDescriptor dpd =
            DependencyPropertyDescriptor.FromProperty(pd);

        if (dpd != null && dpd.IsAttached)
        {
            if (string.Compare(dpd.DependencyProperty.Name, propertyName, StringComparison.CurrentCultureIgnoreCase) == 0 && dpd.DependencyProperty.OwnerType == ownerType)
            {
                return dpd.DependencyProperty;
            }
        }
    }

    return null;
}

Source