AssociatedObject.FindName dans le comportement Silverlight OnAttached méthode retourne null

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

  •  23-09-2019
  •  | 
  •  

Question

Je fais un comportement Silverlight pour permettre en faisant glisser un élément par un élément contenu « de la poignée de drag » (au lieu de tout l'élément étant déplaçable). Pensez-y comme une barre de titre de la fenêtre.

Dans la méthode OnAttached J'appelle: AssociatedObject.FindName (DragHandle) mais cela revient nulle.

J'ai ensuite essayé la gestion des événements Loaded du AssociatedObject et mon code en cours d'exécution, mais je reçois un nul retourné encore.

Est-ce que je comprends mal ce que FindName est capable de faire? Le AssociatedObject est dans un ItemsControl (je veux une collection d'éléments pouvant être déplacées). Donc, il y a une sorte de NameScope problème?

Était-ce utile?

La solution

Oui, cela ressemble à un problème de NameScope. documentation MSDN sur XAML namescopes va sur la façon dont namesopes sont définis pour les modèles et les contrôles de l'élément. Utilisez-vous un modèle pour les articles dans votre ItemsControl?

Vous pouvez juste avoir à marcher l'arbre visuel récursive avec quelque chose comme ceci pour trouver l'élément correct par nom:

    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;
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top