Wie verbirgt man "herum" ein bestimmtes Steuerelement?

8

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 ...

    
Senfsäcker Asenhorst 02.05.2011, 19:40
quelle

2 Antworten

3

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:

  • Die Größenänderung wird nicht unterstützt. Dies könnte wahrscheinlich durch die Bindung der Spaltenbreite und Zeilenhöhe des Overlay-Gitters mit Konvertern behoben werden, aber es ist nicht sehr einfach
  • Es verhindert, dass Sie andere Steuerelemente anklicken, aber Sie können weiterhin mit ihnen über die Tastatur interagieren. Ich denke, der einzige Weg, dies zu verhindern, wäre, sie tatsächlich zu deaktivieren ...
Thomas Levesque 02.05.2011 21:41
quelle
1

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).

    
Andrei Pana 03.05.2011 06:35
quelle

Tags und Links