2011-03-04 27 views
5

Tengo un DependencyObject (Comportamiento de interactividad) y me gustaría obtener su x: Nombre (solo obtener, no establecer) del código. ¿Es posible? Después de la respuesta AnthonyWJones::¿Es posible obtener x: Nombre de un DependencyObject (Silverlight)?

EDIT

he insertado el código siguiente en mi comportamiento de la base:

[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)); 

me he dado mis comportamientos x: Nombre, sin embargo, la propiedad Name no lo hace llenarse

Respuesta

1

Si la clase que deriva de DependencyObject no expone una propiedad Name entonces no se puede determinar la x:Name asignado. El valor x:Name se almacena solo en un árbol de objetos interno y no hay API para resolver el valor (el objeto) de nuevo a un valor de clave (el nombre).

Sin embargo, si este es su propio comportamiento, simplemente agregue una propiedad de dependencia Name a su comportamiento. x: El nombre asignará es el valor a una propiedad Name si está presente.

Si este es un comportamiento existente, puede heredarlo para crear una nueva clase que tenga una propiedad Name. Desafortunadamente, algunos comportamientos están sellados por lo que no siempre se puede hacer esto.

+0

gracias, lo probaré el lunes! – TDaver

+0

¡Lo he probado y no funciona! Ver la edición de la publicación original ... – TDaver

+0

@AnthonyWJones: entonces, ¿tienes alguna idea de POR QUÉ no está funcionando? – TDaver

3

Si desea que su propiedad Name sea igual que x: Name XAML name, entonces, en lugar de implementar su propia propiedad depency, conecte con la existente que ya está registrada. Simplemente puede poner en práctica su propiedad de nombre como:

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

Puede crear AttachedProperty 'Nombre', y el uso de NameAttachedProperty.GetName(DependencyObject)

Por supuesto, tendrá que adjuntar a su elemento antes de usar.

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); 
    } 
} 
Cuestiones relacionadas