Можно ли получить x: имя DependencyObject (Silverlight)? - PullRequest
6 голосов
/ 04 марта 2011

У меня есть 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 не заполняется.

Ответы [ 3 ]

4 голосов
/ 01 мая 2011

Если вы хотите, чтобы ваше свойство Name совпадало с именем XAML x: Name, тогда вместо реализации вашего собственного свойства зависимости добавьте уже существующее, которое уже зарегистрировано.Вы можете просто реализовать свойство name как:

public string Name
{
    get { return (string) base.GetValue(FrameworkElement.NameProperty); }
    set { base.SetValue(FrameworkElement.NameProperty, value); }
}
2 голосов
/ 23 ноября 2011

Вы можете создать '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);
    }
}
2 голосов
/ 04 марта 2011

Если класс, производный от DependencyObject, не предоставляет свойства Name, то вы не можете определить присвоенное x:Name.Значение x:Name хранится только во внутреннем дереве объектов, и отсутствует API для преобразования значения (объекта) в значение ключа (имя).

Однако, если это ваше собственное поведение, простодобавьте в ваше поведение свойство зависимости Name.x: Name будет присваивать значение Name свойству, если оно присутствует.

Если это существующее поведение, вы можете унаследовать его, чтобы создать новый класс со свойством Name.К сожалению, некоторые модели поведения закрыты, поэтому вы не всегда можете сделать это.

...