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

您可以创建“名称”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不公开Name属性,则您无法确定分配的x:Name. 该x:Name值仅存储在内部对象树中,并且没有 API 可以将值(对象)解析回键值(名称)。

但是,如果这是您自己的行为,那么只需将Name依赖属性添加到您的行为中即可。x:Name 将为Name属性分配值(如果存在)。

如果这是现有行为,您可以从它继承以创建具有Name属性的新类。不幸的是,有些行为是密封的,所以你不能总是这样做。

于 2011-03-04T17:00:32.910 回答