2009-02-20 4 views
6

J'ajoute un UserControl à un autre dans Silverlight 2 par programmation en l'ajoutant à la collection "Children" du contrôle parent. Au début, cela fonctionne bien. Si je fais quelque chose d'autre dans la fenêtre (dans mon cas, je fais défiler tout le panneau hors de vue puis de nouveau dans la vue) alors cela change apparemment l'ordre de rendu et fait que mon contrôle soit derrière les autres. Je cherche un moyen de contrôler ce comportement, de forcer ma fenêtre à être au top. Le contrôle Canvas a une propriété ZOrder qui vous permet de le définir, mais je n'utilise pas de Canvas, j'utilise Grids.Contrôle de l'ordre de rendu (ZOrder) dans Silverlight sans utiliser le contrôle Canvas

J'ai joué avec l'utilisation de Children.Insert et de jouer avec l'index et cela change l'ordre de rendu, mais cela semble être une manière kludgey pour résoudre le problème. Comment puis-je forcer mon contrôle à être sur le dessus?

--Matt

Répondre

4

Dans une grille, le ZOrder doit être dicté par l'ordre ou les enfants. La position 0 étant en bas, la position 1 étant en haut de la position 0 et ainsi de suite.

Je ne suis pas sûr que je suis d'accord que vous pouvez utiliser Canvas.ZIndex avec une grille - c'est une propriété attachée du Canvas, donc ne serait disponible que si votre grille était dans un Canvas.

http://msdn.microsoft.com/en-us/library/system.windows.controls.canvas.zindex(VS.95).aspx

1

Vous devriez pouvoir utiliser Canvas.ZIndex dans une grille, il est en fait mal nommé et devrait être Panel.ZIndex mais il devrait fonctionner.

7

Canvas.ZIndex fonctionnera pour une grille (et tout autre contrôle dérivé de UIElement). Comme vous pouvez le voir de http://msdn.microsoft.com/en-us/library/bb979730(VS.95).aspx Tout ce qui dérive de UIElement (la classe de base pour tous les éléments rendus dans Silverlight) prend en charge la propriété Canvas.ZIndex, ainsi que Canvas.Top et Canvas.Left.