AssociatedObject.FindName dans le comportement Silverlight OnAttached méthode retourne null
-
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?
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;
}