In meiner Anwendung brauche ich in bestimmten Situationen modales Verhalten, d. h. der Benutzer sollte nur mit einem bestimmten Element der Benutzeroberfläche interagieren können (z. B. alle Steuerelemente in einer Gruppenbox). Ich möchte keine modalen Dialoge verwenden, also versuche ich einen Weg zu finden, alles "auszublenden", mit Ausnahme von dem Steuerelement, das aktiv bleiben soll, vorzugsweise indem man alles andere verdunkelt (wodurch dem Steuerelement der visuelle Fokus gegeben wird) in Frage).
Wie könnte ein solches Verhalten erreicht werden? Beachten Sie, dass das Element, das modal werden soll, zu jeder Zeit Teil der Benutzeroberfläche ist. Daher kann ich es nicht einfach auf ein Overlay oder ähnliches platzieren.
Ich bin auf Decorators und Adorners gestoßen, aber es gibt ziemlich wenig Informationen über diese ...
Sie können ein Overlay auf das gesamte Fenster anwenden und OpacityMask
dieses Overlays so einstellen, dass es oberhalb des Elements, das modal sein muss, transparent ist. Ich werde versuchen, ein Beispiel in ein paar Minuten zu veröffentlichen.
EDIT: OK, es ist ein bisschen schwieriger als ich erwartet habe ... Hier ist eine etwas funktionierende aber hässliche Lösung:
%Vor% Im obigen Code ist root
das Hauptfenster des Fensters.
Diese Lösung funktioniert zwar, hat aber zwei Hauptprobleme:
Ich würde mit einem Adorner gehen, weil es das WPF-Element ist, für das msdn angibt, dass es verwendet werden kann, um einen Teil oder das gesamte UIElement visuell zu maskieren oder zu überschreiben (siehe hier ).
Einen guten Startpunkt finden Sie in diesem Blogpost , wo Sie wahrscheinlich den Bereich des UIElements, das Sie hervorheben möchten, von der gerenderten Region ausschließen möchten. (An diesem Punkt können Sie sogar einen VisualBrush des gesamten Fensters erstellen und den Adorner damit malen, wenn Sie einen coolen Effekt erzielen möchten, aber ansonsten sollte ein solider Pinsel mit einer Deckkraft von etwa 0,5 ausreichen).
Thomas bemerkte sehr gut, dass wenn dieses "modale" Verhalten aktiviert ist, Sie alle Steuerelemente deaktivieren sollten, mit denen der Benutzer nicht interagieren soll, da nur deren Deaktivierung garantiert, dass diese Steuerelemente nicht auf Benutzereingaben reagieren (oder sie zumindest unfokussierbar machen, aber ich denke, das könnte mit ihrem vorherigen Zustand verwechselt werden, wenn Sie aus dem "modalen" Zustand zurückkehren).
Tags und Links wpf user-interface