2011-12-19 43 views
1

我用this "guide", 但不同的是,我不想限制對象我附加屬性,UIElement 我想附加一個屬性到最通用的項目:對象,所以這是我的代碼:AttachedProperty對象?

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和谷歌),並沒有找到任何解決辦法,但據我瞭解我聯繫的文章, attachedProperties不僅限於UIElements嗎? 那麼......我該怎麼辦?

ps:要完成我的答案我必須爲一些對象獲取一個名稱我從一個DLL解析(並顯示在TreeView中),所以,如果我沒有Name字段/屬性,我會添加附件 !

回答

2

您不能附加屬性的對象(或者你能夠延長整個框架..)。 依賴項屬性只能由繼承自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"); 
+0

依賴屬性只能由DependencyObjects使用,並且QbName應該從那裏繼承。但是您可以將附加屬性附加到任何對象。 – Falanwe 2011-12-19 10:44:22

+0

我們說的是同樣的事情。您可以將依賴項屬性附加到從DependencyObject派生的任何內容,而不是從(System。)對象派生。 – Strillo 2011-12-19 10:50:53

+0

這是從我鏈接的文章:「如果您的類正在嚴格定義附加屬性用於其他類型,然後該類不必從DependencyObject派生。但您需要從DependencyObject派生如果您遵循總體WPF擁有附屬財產的模型也是一種依賴財產。「 – 2011-12-19 11:09:11

0

依賴屬性不限於UIElement S中,但僅限於DependencyObjects。如果您將代碼中的object更改爲DependencyObject,它應該可以工作。

我不知道什麼是你真正想要做的,所以我不知道如果這樣做,這是一個可行的解決方案。

+0

他沒有使用通常的依賴屬性,但附加屬性 – Falanwe 2011-12-19 10:42:24

+0

這是我聯繫的文章:「如果你的類是嚴格定義附加屬性上使用其他類型,那麼該類不必從DependencyObject派生,但如果遵循將附加屬性也作爲依賴屬性的整體WPF模型,則需要從DependencyObject派生。「 – 2011-12-19 11:08:49