6

DependencyObject (対話動作) があり、その x:Name (設定ではなく取得のみ) をコードから取得したいと考えています。出来ますか?

編集:AnthonyWJonesの答えに続いて:

基本動作に次のコードを挿入しました。

[EditorBrowsable(EditorBrowsableState.Never)]
public string Name
{
    get { return (string)GetValue(NameProperty); }
    set { SetValue(NameProperty, value); }
}

public static readonly DependencyProperty NameProperty =
            DependencyProperty.Register("Name", typeof(string), typeof(BaseBehavior<T>), new PropertyMetadata(null));

ビヘイビアに x:Name を指定しましたが、Name プロパティが入力されません。

4

3 に答える 3

4

Name プロパティを x:Name XAML 名と同じにする場合は、独自の依存関係プロパティを実装する代わりに、既に登録されている既存のプロパティをピギーバックします。name プロパティを次のように簡単に実装できます。

public string Name
{
    get { return (string) base.GetValue(FrameworkElement.NameProperty); }
    set { base.SetValue(FrameworkElement.NameProperty, value); }
}
于 2011-05-01T08:44:37.573 に答える
2

'Name' AttachedPropertyを作成し、使用することができますNameAttachedProperty.GetName(DependencyObject)

もちろん、使用する前に要素にアタッチする必要があります。

public static class NameAttachedProprty
{
    public static readonly DependencyProperty NameProperty =
        DependencyProperty.RegisterAttached("Name", typeof (string), typeof (NameAttachedProprty), new PropertyMetadata(default(string)));

    public static void SetName(DependencyObject element, string value)
    {
        element.SetValue(NameProperty, value);
    }

    public static string GetName(DependencyObject element)
    {
        return (string) element.GetValue(NameProperty);
    }
}
于 2011-11-23T08:12:06.193 に答える
2

派生元のクラスがプロパティをDependencyObject公開しない場合、割り当てられた . 値は内部オブジェクト ツリーにのみ格納され、値 (オブジェクト) を解決してキー値 (名前) に戻す API はありません。Namex:Namex:Name

ただし、これが独自の動作である場合は、動作にName依存関係プロパティを追加するだけです。Namex:Name は、存在する場合、プロパティに値を割り当てます。

これが既存の動作である場合は、それを継承して、プロパティを持つ新しいクラスを作成できる場合がありNameます。残念ながら、一部の動作は封印されているため、常にこれを行うことはできません。

于 2011-03-04T17:00:32.910 に答える