BringToFront dans WPF
J'ai besoin de mettre au premier plan d'un contrôle personnalisé dans WPF.
pseudoCode
OnMouseDown()
{
if (this.parent != null)
this.parent.BringToFront(this);
}
Je sais, je sais qu'il y a un ZIndexmais ne comprends toujours pas comment remplacer le simple WinForm BringToFront
à parent.SetZIndex(this, ?MaxZIndex(parent)? + 1)
?
Peut-être il ya une meilleure façon de faire dans ce qui est cool comme WPF?!..
source d'informationauteur serhio
Vous devez vous connecter pour publier un commentaire.
Ici est une extension de la fonction qui ajoute de la méthode BringToFront fonctionnalité à tous les FrameworkElements qui sont contenus dans un Panneau.
Vraiment le meilleur que vous pouvez espérer, c'est d'en faire un élément de plus haut niveau à l'égard de tous les éléments frères dans le même parent Panneau (comme StackPanel, Grille, Toile, etc). Le z-ordre des éléments dans les panneaux est contrôlée par le Le panneau.ZIndex propriété attachée.
Par exemple:
Dans cet exemple, le rectangle bleu apparaît sur le dessus. C'est expliqué un peu plus dans ce post de blog.
Il y a aussi un problème avec les changements dans le Panneau.ZIndex de ne pas être immédiatement pris en compte dans l'INTERFACE utilisateur. Il y a une méthode privée qui permet de rafraîchir la z-index, mais vu que c'est privé, il n'est pas une bonne idée de l'utiliser. Pour contourner cela, vous devez supprimer et ajouter de nouveau les enfants.
Cependant on ne peut pas faire tout élément de plus haut niveau. Par exemple:
Dans ce cas, le rectangle jaune s'affiche. Parce que la deuxième grille intérieure est indiqué sur le dessus de la première grille intérieure et de tous les contenus. Vous devez le modifier comme pour porter le rectangle bleu en haut:
Lorsque vous traitez avec un ItemsControl, cette question est pertinent. La plupart des autres commandes ont un seul enfant, mais vous auriez encore besoin de les amener à faire l'un de ses enfants le plus haut.
Enfin, Ornements sont un bon moyen de mettre les choses au-dessus de tout, mais ils ne sont pas une partie du principal de visual arbre. Donc je ne suis pas sûr que cela fonctionne dans votre cas.
J'ai essayé de la toile.zindex et ça ne fonctionne pas, mais la solution qui est à moi est à l'aide de la Frontière dans une fenêtre de contrôle:
J'ai trouvé une meilleure solution. L'obtenir:
Il est juste en exemple, pas de méthode universelle. Mais vous pouvez l'utiliser dans des applications dynamiques à l'ajout de contrôles. Ce code ajoute un élément que vous souhaitez placer sur le dessus de la et de la UIElementCollection. Il fonctionne si tous les éléments ont la même ZIndex.