AssociatedObject.FindName en el comportamiento Silverlight OnAttached devuelve el método nula

StackOverflow https://stackoverflow.com/questions/2145924

  •  23-09-2019
  •  | 
  •  

Pregunta

Estoy haciendo un comportamiento Silverlight para permitir arrastrar un elemento por un elemento de contenido "de control de arrastre" (en lugar de todo siendo el elemento arrastrable). Piense en ello como una barra de título de la ventana.

En el método OnAttached estoy llamando: AssociatedObject.FindName (DragHandle) pero esto se vuelve nula.

luego trató de manejo de eventos Loaded del AssociatedObject y funcionando mi código, pero todavía me volví un nulo.

¿Estoy mal entendido lo FindName es capaz de hacer? El AssociatedObject está en ItemsControl (Quiero una colección de elementos que pueden arrastrarse). Entonces, ¿hay algún tipo de problema NameScope?

¿Fue útil?

Solución

Sí, suena como un problema NameScope. El documentación de MSDN en XAML namescopes va sobre cómo namesopes se definen para las plantillas y los controles de elementos. ¿Está utilizando una plantilla para los artículos en su ItemsControl?

Es posible que sólo tenga que recorrer el árbol visual de forma recursiva con algo como esto para encontrar el elemento correcto por su nombre:

    private static FrameworkElement FindChildByName(FrameworkElement parent, string name)
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
        {
            FrameworkElement child = VisualTreeHelper.GetChild(parent, i) as FrameworkElement;

            if (child != null && child.Name == name)
            {
                return child;
            }
            else
            {
                FrameworkElement grandChild = FindChildByName(child, name);

                if (grandChild != null)
                {
                    return grandChild;
                }
            }
        }

        return null;
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top