Necesito hacer que un control aparezca sobre todos los demás controles, por lo que se superpondrá parcialmente.¿Cómo hacer control de superposición por encima de todos los otros controles?
Respuesta
Si está utilizando un lienzo o Cuadrícula en su diseño, darle el control a ser puesto en la parte superior un mayor ZIndex
De 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 no se especifica ZIndex, la los hijos de un panel se representan en el orden en que se especifican (es decir, el último en la parte superior).
Si desea hacer algo más complicado, puede ver cómo se implementa ChildWindow en Silverlight. Superpone un fondo semitransparente y emergente sobre su RootVisual completo.
Los controles en la misma celda de una cuadrícula se representan de atrás hacia adelante. Entonces, una forma simple de poner un control encima de otro es colocarlo en la misma celda.
Aquí hay un ejemplo útil, que muestra un panel que desactiva todo en la vista (es decir, el control de usuario) con un mensaje ocupado mientras se ejecuta una tarea larga (es decir, mientras la propiedad BusyMessage
no es nula) :
<Grid>
<local:MyUserControl DataContext="{Binding}"/>
<Grid>
<Grid.Style>
<Style TargetType="Grid">
<Setter Property="Visibility"
Value="Visible" />
<Style.Triggers>
<DataTrigger Binding="{Binding BusyMessage}"
Value="{x:Null}">
<Setter Property="Visibility"
Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
<Border HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Background="DarkGray"
Opacity=".7" />
<Border HorizontalAlignment="Center"
VerticalAlignment="Center"
Background="White"
Padding="20"
BorderBrush="Orange"
BorderThickness="4">
<TextBlock Text="{Binding BusyMessage}" />
</Border>
</Grid>
</Grid>
Esta es una función común de Adorners en WPF. Generalmente, los adornos aparecen por encima de todos los otros controles, pero las otras respuestas que mencionan el orden z pueden ajustarse mejor a su caso.
Robert Rossney tiene una buena solución. Aquí hay una solución alternativa que he usado en el pasado que separa la "superposición" del resto del contenido. Esta solución aprovecha la propiedad adjunta Panel.ZIndex
para colocar la "Superposición" encima de todo lo demás. Puede establecer la Visibilidad de la "Superposición" en el código o usar un DataTrigger
.
<Grid x:Name="LayoutRoot">
<Grid x:Name="Overlay" Panel.ZIndex="1000" Visibility="Collapsed">
<Grid.Background>
<SolidColorBrush Color="Black" Opacity=".5"/>
</Grid.Background>
<!-- Add controls as needed -->
</Grid>
<!-- Use whatever layout you need -->
<ContentControl x:Name="MainContent" />
</Grid>
<Canvas Panel.ZIndex="1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="570">
<!-- YOUR XAML CODE -->
</Canvas>
Ponga el control que desea llevar al frente al final de su código XAML. Es decir.
<Grid>
<TabControl ...>
</TabControl>
<Button Content="ALways on top of TabControl Button"/>
</Grid>
- 1. Flotante de control sobre otros controles en WPF
- 2. La plantilla de error se muestra encima de otros controles, cuando debería estar oculta
- 3. Cómo orientar todos los controles (Estilos WPF)
- 4. Pasa por todos los controles de usuario en una página
- 5. Renderizar control WPF encima de WindowsFormsHost
- 6. WPF: ¿Cómo hacer referencia a otros controles dentro de la propiedad de propiedad del disparador?
- 7. Buscar control por nombre desde los controles de Windows Forms
- 8. ¿Cómo puedo eliminar dinámicamente todos los controles en un control de usuario?
- 9. ¿Cómo hacer una pantalla completa div y encima de todos los demás elementos con jQuery?
- 10. Todos los controles son nulos dentro de usercontrol
- 11. ¿WPF tiene controles equivalentes para todos los controles de Winforms?
- 12. Cómo recorrer todos los controles en un formulario, incluidos los controles en un subformulario - Access 2007
- 13. Cómo hacer un control flotante
- 14. Silverlight: Encuentre todos los controles de tipo en diseño
- 15. Configuración de la propiedad VerticalAlignment para todos los controles
- 16. ASP.NET control de usuario no inicializa los controles secundarios
- 17. ¿Cómo desactivo todos los controles en la página ASP.NET?
- 18. Superposición de controles para video en iPhone/iPad
- 19. cómo hacer div en la parte superior de todos los demás controles
- 20. Recorrer todos los controles en la página web asp.net
- 21. ¿Cómo puedo obtener todos los controles de un formulario que incluye controles en cualquier contenedor?
- 22. Cómo hacer que fitBounds tenga en cuenta los controles personalizados
- 23. Método genérico para encontrar todos los controles TextBox en Silverlight
- 24. ¿Cómo combinar dos íconos? (superposición de un ícono encima de otro)
- 25. Deshabilitar todos los controles dentro de div en asp.net
- 26. En WinForms, ¿por qué no puede actualizar los controles de UI desde otros subprocesos?
- 27. ¿Cómo creo un control personalizado con un subpanel que acepta otros controles en designtime?
- 28. Hacer todos los controles en un formulario de solo lectura de una vez
- 29. C# Control de usuario que pueden contener otros controles (cuando se utiliza)
- 30. Dibuje una imagen de superposición semi transparente en todas las ventanas con algunos controles
funciona! pero ¿cómo puedo mover Overlay Grid para corregir la posición? –
Esta superposición cubrirá toda la ventana, no solo un área específica. –
¡La mejor solución de todas! ¡Gracias! –