Ich versuche, WPF zu lernen, und bis jetzt liebe ich es. Allerdings gibt es etwas fehlt oder einfach etwas, das ich nicht verstehe. Wie können wir mehrere Ebenen von Steuerelementen in WPF anzeigen? Der beigefügte Screenshot gibt eine gute Vorstellung davon, was ich zu tun versuche. Ich habe ein Fenster, und ich möchte etwas anderes darüber anzeigen. Wie kann ich das tun?
Antworten
Zu viele Anzeigen?Wenn Sie zwei Elemente in der gleichen Zeile/Spalte in einem Raster platzieren, werden sie einfach übereinander gelegt. Sie können dann die Sichtbarkeit der einzelnen Elemente verwenden, um sie ein- oder auszublenden. Also zum Beispiel:
<Grid>
... row/column definitions
<Grid Grid.Row="0" Grid.Column="0">
... main content here
</Grid>
<Grid Grid.Row="0" Grid.Column="0" x:Name="grid2">
... overlaid content here
</Grid>
</Grid>
Jetzt wird der überlagerte Inhalt über dem Hauptinhalt angezeigt. Wenn Sie grid2.Visibility auf Visible/Hidden setzen, wird der überlagerte Inhalt angezeigt/versteckt.
Mir fallen zwei Möglichkeiten ein, diesen Effekt zu erzielen (nicht rechteckige, halbtransparente Überlagerung eines Fensters, die über die Grenzen des Fensters hinausgeht).
Erste Option, DON'T USE THIS IN PRODUCTION CODE (AllowTransparency ist langsam und sehr buggy) - Machen Sie das Fenster größer als der eigentliche Inhalt, setzen Sie AllowsTransaprencey="True", so dass der Bereich "außerhalb" des Fensters ist transparent, jetzt alles, was Sie zu tun haben, für das Popup ist ein weiteres visuelles in den gleichen Container wie das "Fenster" hinzuzufügen.
Zweite Option, verwenden Sie ein Popup, müssen Sie Ihre Popup sorgfältig zu positionieren, rufen Sie SetWindowRgn über interop, um es nicht rechteckig und rufen Sie die Win32-API-Funktion, die Transparenz-Wert (sorry, erinnere mich nicht an den Namen im Moment), um es halbtransparent zu machen.
Die erste Option ist einfach zu implementieren und sieht besser aus als die zweite Option, aber sie ist langsamer und Sie werden auf alle möglichen seltsamen Fehler stoßen (einschließlich Quetschungen mit einigen Anzeigetreibern) - ich weiß das aus Erfahrung, als ich die Software, die ich verkaufe, von AllowTransparency auf SetWindowRgn umstellte, verschwanden 90 % der Quetschungsberichte.
Die zweite Option erfordert eine Menge nativer Win32-API-Aufrufe, aber sie sollte funktionieren.
Ich weiß selbst nicht viel über WPF, aber ist die Panel.ZIndex Vielleicht sind Sie ja an einer Immobilie interessiert?
Können Sie Dekorationsschicht zu überlagern. Es handelt sich im Grunde um eine Rendering-Oberfläche, die jedes verzierte Element überlagert.
Man könnte einen ähnlichen Effekt erzielen, indem man Dinge in einem Raster überlagert (die Dinge stapeln sich einfach übereinander, wenn sie sich in derselben Zelle befinden), aber mein Spinnensinn würde mir sagen, dass das nur ein weiteres Fenster ist, das wie etwas definiert ist:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="SubWindow" Height="100" Width="100" WindowStyle="None" AllowsTransparency="True" Opacity="0.5" >
Sie können es dann in Ihrem Hauptfenster anzeigen, indem Sie etwas wie folgt tun:
SubWindow sw = new SubWindow ();
sw.DoModal();
- See previous answers
- Weitere Antworten anzeigen