附加属性对象?

时间:2011-12-19 10:25:57

标签: c# wpf dependency-properties attached-properties

我使用了this "guide", 但不同之处在于我不想将附加属性的对象限制为UIElement 我想将属性附加到最通用的项目:object,所以这是我的代码:

    public static readonly DependencyProperty QbNameProperty =    DependencyProperty.RegisterAttached(
        "QbName",
        typeof(string),
        typeof(QbName),
        new PropertyMetadata("")
    );

    public static void SetQbName(object obj, string name)
    {
        obj.SetValue(QbNameProperty, name);
    }
    public static Boolean GetQbName(object obj)
    {
        return (Boolean)obj.GetValue(QbNameProperty);

事情是对象不存在SetValue和GetValue ...我试图到处寻找(SO和谷歌)并没有找到任何解决方案但据我所知,我链接的文章,attachmentProperties不限于UIElements对 ? 那么......我该怎么办?

ps:完成我的回答我必须获取一些对象的名称我从DLL解析(并在TreeView中显示)所以,如果我没有名称字段/属性,我将添加依恋!

2 个答案:

答案 0 :(得分:2)

您不能将属性附加到Object(或者您将能够扩展整个框架..)。 依赖属性只能由继承自DependencyObject的对象使用。

/// <summary>
/// QbName
/// </summary>
public class QbName : DependencyObject
{
    /// <summary>
    /// 
    /// </summary>
    public static readonly DependencyProperty NameProperty = DependencyProperty.RegisterAttached(
        "Name",
        typeof(string),
        typeof(QbName),
        new PropertyMetadata("")
        );

    /// <summary>
    /// Sets the name.
    /// </summary>
    /// <param name="element">The element.</param>
    /// <param name="value">The value.</param>
    public static void SetName(DependencyObject element, string value)
    {
        element.SetValue(NameProperty, value);
    }

    /// <summary>
    /// Gets the name.
    /// </summary>
    /// <param name="element">The element.</param>
    /// <returns></returns>
    public static string GetName(DependencyObject element)
    {
        return element.GetValue(NameProperty).ToString();
    }
}

然后你可以使用静态方法:

QbName qb = new QbName();
QbName.SetName(qb, "test");

答案 1 :(得分:0)

依赖项属性不限于UIElement,但它们仅限于DependencyObjects。如果您将代码中的object更改为DependencyObject,则应该有效。

我不知道你究竟想做什么,所以我不知道这样做是否可行。