2010-02-19 7 views
6

Wie können wir Benutzerwarnungen auf ähnliche Weise wie Fehler anzeigen. Der einzige Unterschied besteht darin, dass die Kontrolle z.B. TextBox muss eine andere Fehlervorlage haben und ähnlich wie Validation.HasError muss eine Validation.HasWarning vorhanden sein.WPF separate Fehler- und Warnstile

Mit anderen Worten sind nicht alle Validierungsprobleme "Fehler" (zumindest in unserer Anwendung). Wir möchten visuell anzeigen, ob etwas eine Warnung oder ein Fehler ist.

Antwort

3

Ich bekomme manchmal die Notwendigkeit für diesen Mittelweg. Wie Command s, die 3 Werte von CanExecute anstatt true oder false benötigen.

Wie für Warnungen, die wie Validierung funktionieren, ich weiß nicht alle Stücke, die man zusammensetzen müsste, aber ich denke, ich weiß, wie man anfangen würde.

Sie müssen sich auf angefügte Eigenschaften und angehängte Verhaltensweisen verlassen (angefügte Eigenschaften, die Ereignisse für das Objekt abonnieren und Vorgänge ausführen, die sich auf diese Ereignisse beziehen, wenn sie ausgelöst werden). Möglicherweise verfügen Sie über einen, der eine Sammlung von ValidationRule Objekten verwaltet, die verwendet werden, um festzustellen, ob eine Warnung ausgegeben wird oder nicht, ähnlich wie die Eigenschaften Validation. Möglicherweise haben Sie einen Namen mit der Bezeichnung HasWarning, der von der Validierung, auf die in Stil-/Vorlagen-Triggern verwiesen werden kann, gesetzt oder deaktiviert wird.

Sie könnten die Warnanzeige Teil jeder Vorlage Kontrolle machen, oder man kann wieder nachahmen Validation und haben eine WarningTemplate angebrachte Eigenschaft, die die Warnhinweise in einem AdornerLayer Ort verwendet wird.


Da benutzerdefinierte ValidationRule Objekte zurückgeben ein ValidationResult Objekt, in dem die ErrorContent ist einfach ein Objekt, und das Objekt auch in den ValidationError Objekte als ErrorContent ausgesetzt ist, können Sie auch die regelmäßige Überprüfung, nachdem alle nutzen können. Sie könnten möglicherweise eine Klasse als Ihr ErrorContent Objekt verwenden, das eine ErrorType Eigenschaft der Warnung oder des Fehlers hat und an das in Ihrer ErrorTemplate binden.

Ich bin nicht sicher, ob das Vorhandensein von ValidationError s bestimmte Vorgänge (wie das Drücken von Tasten) verhindern würde, aber eine Art Proxy für das ViewModel könnte erstellt werden, das die ErrorType beurteilt.

+0

+1 für die Beobachtung, dass 'ErrorContent' ein Objekt, keine Zeichenfolge ist. Dies ist eine sehr einfache Möglichkeit, dies zu erreichen. Sie erstellen einfach eine Nachrichtenklasse mit Fehler-, Warnungs- und Informationsunterklassen sowie eine 'DataTemplate' für jeden Typ. –