Question

J'ai du mal à comprendre quand la méthode OnRender est invoquée.Prenons mon exemple :J'ai une classe SomeElement dérivée de FrameworkElement qui remplace la méthode OnRender.Supposons que j'ai un Grid grid.Ce à quoi je m'attendrais, c'est que

var someElement = new SomeElement();
grid.AddVisualChild(someElement);
someElement.InvalidateVisual();

entraînerait le déclenchement de la méthode SomeElement.OnRender.Ce n'est pas le cas dans mon cas, mais ce qui suit le fait :

var someElement = new SomeElement();
grid.Children.Add(new SomeElement());
someElement.InvalidateVisual();

Donc ma question est pourquoi someElement n'est pas dessiné lorsqu'il est ajouté uniquement à l'arborescence visuelle.Quelle est l'importance de l'ajouter à la propriété Children?Et plus généralement, comment s’appelle OnRender ?Via l'arborescence visuelle, ou Children propriété, ou?

Était-ce utile?

La solution

AddVisualChild ne fait pas ce que vous pensez.

AddVisualChild est juste là pour créer une relation enfant-parent entre deux visuels dans VisualTree.Rien de plus ou de moins.VisualTree ne restitue pas tout ce qu'il contient.

AddLogicalChild fait la même chose, il crée simplement LogicalTree.LogicalTree est généralement plus petit et plus court que VisualTree, ce qui signifie qu'il est plus rapide.

Afin de prendre pleinement en charge le rendu de vos enfants, vous devez appeler la méthode de mesure sur eux et organiser la méthode.De plus, vous devez modifier la propriété VisualChildrenCount de votre parent et transmettre la bonne taille à chaque enfant et vous devez les placer dans la bonne position pour que l'utilisateur puisse les voir.Ensuite, les choses seront rendues.

Appeler AddVisualChild seul et InvalidateVisual ne fait rien.

La collection Children, en revanche, est une UIElementCollection qui effectue automatiquement toutes les choses ci-dessus que j'ai mentionnées.C'est pourquoi cela fonctionne avec Children.Add(...).

De plus, vous devriez toujours travailler avec la collection Enfants au lieu d’écrire vos propres choses.

Comme HighCore l'a mentionné, de nombreux problèmes peuvent être résolus simplement en disposant d'un MVVM approprié.

Peut-être que vous n’avez pas besoin d’un contrôle personnalisé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top