Eu preciso fazer com que um controle apareça acima de todos os outros controles, para que eles se sobreponham parcialmente.
166
Se você estiver usando um Canvas
ou Grid
em seu layout, dê um controle maior para que o controle seja colocado em cima ZIndex
.
Do 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>
Se você não especificar ZIndex
, os filhos de um painel serão renderizados na ordem em que são especificados (por exemplo, o último no topo).
Se você deseja fazer algo mais complicado, pode ver como isso ChildWindow
é implementado no Silverlight. Sobrepõe um plano de fundo semitransparente e pop-up ao longo de todo o processo RootVisual
.
Robert Rossney tem uma boa solução. Aqui está uma solução alternativa que eu usei no passado que separa a "Sobreposição" do restante do conteúdo. Esta solução tira proveito da propriedade anexada
Panel.ZIndex
para colocar a "Sobreposição" em cima de tudo o resto. Você pode definir a visibilidade da "Sobreposição" no código ou usar aDataTrigger
.fonte
Os controles na mesma célula de uma grade são renderizados de frente para frente. Portanto, uma maneira simples de colocar um controle em cima de outro é colocá-lo na mesma célula.
Aqui está um exemplo útil, que exibe um painel que desativa tudo na exibição (ou seja, o controle do usuário) com uma mensagem ocupada enquanto uma tarefa de longa execução é executada (ou seja, enquanto a
BusyMessage
propriedade vinculada não é nula):fonte
Coloque o controle que você deseja trazer para a frente no final do seu código xaml. Ou seja,
fonte
Essa é uma função comum dos Adorners no WPF. Os adorners geralmente aparecem acima de todos os outros controles, mas as outras respostas que mencionam a ordem z podem se encaixar melhor no seu caso.
fonte
fonte