2011-12-19 2 views
1

私はthis "guide", を使用しましたが、違いは、プロパティを添付しているオブジェクトImを制限したくないということです。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とグーグル)どこにでも見てみましたし、任意の解決策を見つけるが、私の知る限り、私はリンク先の記事を理解していませんでし、添付プロパティはUIElementsに限定されません。 ...どうすればいいですか?

ps:私の答えを完成するいくつかのオブジェクトの名前を取得する必要があります。DLLから解析して(ツリービューで表示します)、名前フィールド/プロパティがない場合は追加しますアタッチメント !

答えて

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

+0

同じことを言っています。 DependencyObjectは、(System。)Objectではなく、DependencyObjectから派生するものにアタッチすることができます。 – Strillo

+0

これは私がリンクしている記事からです: "あなたのクラスが他の型で使用するために厳密に添付プロパティを定義している場合、そのクラスはDependencyObjectから派生する必要はありません。しかし、WPF全体に従うならDependencyObjectから派生させる必要がありますあなたのアタッチされたプロパティを持つモデルも依存関係のプロパティになります。 " –

0

依存関係プロパティはUIElement秒に制限されないが、それらはDependencyObjectsに制限されています。コード内のobjectDependencyObjectに変更すると正常に動作します。

実際に何をしようとしているのかわかりません。これを実行できるかどうかは分かりません。

+0

彼は通常の依存関係プロパティを使用していませんが、添付プロパティ – Falanwe

+0

これは私がリンクした記事からです: "あなたのクラスが添付プロパティを厳密に定義している場合DependencyObjectから派生する必要はありませんが、添付プロパティを依存関係プロパティとするWPFモデル全体に​​従う場合は、DependencyObjectから派生する必要があります。 –

関連する問題