Je dois faire apparaître un contrôle au-dessus de tous les autres contrôles, afin qu'il les superpose partiellement.
166
Si vous utilisez un Canvas
ou Grid
dans votre mise en page, donnez au contrôle à placer en haut un plus haut ZIndex
.
Depuis MSDN :
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" WindowTitle="ZIndex Sample">
<Canvas>
<Rectangle Canvas.ZIndex="3" Width="100" Height="100" Canvas.Top="100" Canvas.Left="100" Fill="blue"/>
<Rectangle Canvas.ZIndex="1" Width="100" Height="100" Canvas.Top="150" Canvas.Left="150" Fill="yellow"/>
<Rectangle Canvas.ZIndex="2" Width="100" Height="100" Canvas.Top="200" Canvas.Left="200" Fill="green"/>
<!-- Reverse the order to illustrate z-index property -->
<Rectangle Canvas.ZIndex="1" Width="100" Height="100" Canvas.Top="300" Canvas.Left="200" Fill="green"/>
<Rectangle Canvas.ZIndex="3" Width="100" Height="100" Canvas.Top="350" Canvas.Left="150" Fill="yellow"/>
<Rectangle Canvas.ZIndex="2" Width="100" Height="100" Canvas.Top="400" Canvas.Left="100" Fill="blue"/>
</Canvas>
</Page>
Si vous ne spécifiez pas ZIndex
, les enfants d'un panneau sont rendus dans l'ordre dans lequel ils sont spécifiés (c'est-à-dire le dernier en haut).
Si vous cherchez à faire quelque chose de plus compliqué, vous pouvez voir comment ChildWindow
est implémenté dans Silverlight. Il superpose un arrière-plan semi-transparent et une fenêtre contextuelle sur l'ensemble de votre RootVisual
.
Robert Rossney a une bonne solution. Voici une solution alternative que j'ai utilisée dans le passé qui sépare la «superposition» du reste du contenu. Cette solution tire parti de la propriété attachée
Panel.ZIndex
pour placer la "superposition" par-dessus tout le reste. Vous pouvez définir la visibilité de la «superposition» dans le code ou utiliser un fichierDataTrigger
.la source
Les contrôles dans la même cellule d'une Grille sont rendus en arrière-plan. Donc, un moyen simple de placer un contrôle sur un autre est de le placer dans la même cellule.
Voici un exemple utile, qui fait apparaître un panneau qui désactive tout dans la vue (c'est-à-dire le contrôle utilisateur) avec un message occupé alors qu'une tâche de longue durée est exécutée (c'est-à-dire alors que la
BusyMessage
propriété liée n'est pas nulle):la source
Mettez le contrôle que vous souhaitez mettre au premier plan à la fin de votre code xaml. C'est à dire
la source
Il s'agit d'une fonction commune des ornements dans WPF. Les ornements apparaissent généralement au-dessus de tous les autres contrôles, mais les autres réponses qui mentionnent l'ordre z peuvent mieux convenir à votre cas.
la source
la source