是否可以获取DependencyObject(Silverlight)的x:Name?

是否可以获取DependencyObject(Silverlight)的x:Name?,silverlight,silverlight-4.0,dependencyobject,Silverlight,Silverlight 4.0,Dependencyobject,我有一个DependencyObject(一种交互行为),我想从代码中获取它的x:Name(只是get,而不是set)。可能吗 编辑:以下是AnthonyWJones的答案: 我已将以下代码插入到我的基本行为中: [EditorBrowsable(EditorBrowsableState.Never)] public string Name { get { return (string)GetValue(NameProperty); } set { SetValue(NamePr

我有一个DependencyObject(一种交互行为),我想从代码中获取它的x:Name(只是get,而不是set)。可能吗

编辑:以下是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));
[EditorBrowsable(EditorBrowsableState.Never)]
公共字符串名
{
获取{return(string)GetValue(NameProperty);}
set{SetValue(NameProperty,value);}
}
公共静态只读DependencyProperty NameProperty=
Register(“Name”、typeof(string)、typeof(BaseBehavior)、newpropertyMetadata(null));

我已经给出了我的行为x:Name,但是Name属性没有被填充。

如果从
DependencyObject
派生的类没有公开
Name
属性,那么您无法确定分配的
x:Name
x:Name
值仅存储在内部对象树中,没有API将值(对象)解析回键值(名称)

但是,如果这是您自己的行为,那么只需在您的行为中添加一个
名称
依赖项属性即可。x:Name将为
Name
属性赋值(如果存在)


如果这是一个现有的行为,您可以从中继承来创建一个具有
名称
属性的新类。不幸的是,有些行为是密封的,所以您不能总是这样做。

如果您希望您的Name属性与x:Name XAML名称相同,那么您可以使用已经注册的现有属性,而不是实现自己的dependcy属性。您只需将您的name属性实现为:

public string Name
{
    get { return (string) base.GetValue(FrameworkElement.NameProperty); }
    set { base.SetValue(FrameworkElement.NameProperty, value); }
}

您可以创建'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);
    }
}

@AnthonyWJones:那么,你知道它为什么不起作用吗?@tAver:这很奇怪,试着用Name而不是x:Name。如果我从xaml设置Name,它就起作用,如果我设置x:Name,它就不起作用(我的意思是不设置DependencyProperty Name属性)