Ich muss ein Steuerelement über allen anderen Steuerelementen anzeigen lassen, damit es sie teilweise überlagert.
166
Wenn Sie ein Canvas
oder Grid
in Ihrem Layout verwenden, geben Sie dem Steuerelement, das oben platziert werden soll, einen höheren Wert ZIndex
.
Von 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>
Wenn Sie nichts angeben ZIndex
, werden die untergeordneten Elemente eines Bedienfelds in der angegebenen Reihenfolge gerendert (dh das letzte oben).
Wenn Sie etwas Komplizierteres tun möchten, können Sie sich ansehen, wie ChildWindow
es in Silverlight implementiert ist. Es überlagert einen halbtransparenten Hintergrund und ein Popup über Ihrem gesamten Hintergrund RootVisual
.
Robert Rossney hat eine gute Lösung. Hier ist eine alternative Lösung, die ich in der Vergangenheit verwendet habe und die das "Overlay" vom Rest des Inhalts trennt. Diese Lösung nutzt die angehängte Eigenschaft
Panel.ZIndex
, um die "Überlagerung" über alles andere zu platzieren. Sie können entweder die Sichtbarkeit der "Überlagerung" im Code festlegen oder a verwendenDataTrigger
.quelle
Steuerelemente in derselben Zelle eines Rasters werden von hinten nach vorne gerendert. Eine einfache Möglichkeit, ein Steuerelement über ein anderes zu legen, besteht darin, es in dieselbe Zelle zu legen.
Hier ist ein nützliches Beispiel, das ein Fenster öffnet, in dem alles in der Ansicht (dh das Benutzersteuerelement) mit einer Besetztmeldung deaktiviert wird, während eine lange laufende Aufgabe ausgeführt wird (dh während die
BusyMessage
gebundene Eigenschaft nicht null ist):quelle
Setzen Sie das Steuerelement, das Sie einfügen möchten, am Ende Ihres xaml-Codes in den Vordergrund. Dh
quelle
Dies ist eine häufige Funktion von Adorners in WPF. Adorners erscheinen normalerweise über allen anderen Steuerelementen, aber die anderen Antworten, in denen die Z-Reihenfolge erwähnt wird, passen möglicherweise besser zu Ihrem Fall.
quelle
quelle