属性添加到对象

本文关键字:对象 添加 属性 | 更新日期: 2023-09-27 18:18:10

我使用了这个"指南",但不同之处在于,我不想将我附加属性的对象限制在UIElement上我想附加一个属性到最通用的项目:对象,所以这里是我的代码:

    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和谷歌),没有找到任何解决方案,但就我所理解的文章我链接,附加属性不限于ui元素对吗?所以…我该怎么办?

ps:完成我的答案,我必须得到一些对象的名称从DLL解析(并显示在一个树视图),所以,如果我没有一个名称字段/属性,我将添加附件!

属性添加到对象

你不能给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");

依赖属性不限于UIElement s,但仅限于DependencyObject s。如果您将代码中的object更改为DependencyObject,它应该可以工作。

我不知道你到底想做什么,所以我不知道这样做是否是一个可行的解决方案。