Problem beim mischen MultiBinding converter und Trigger in der Art
Einstellung der Stil in <UserControl.Resources>
(vorausgesetzt der Konverter gibt die Farbe Rot)
<Style x:Key="FieldToValidate" TargetType="{x:Type TextBox}">
<Setter Property="Background">
<Setter.Value>
<MultiBinding Converter="{StaticResource VisualQueueOnErrorConverter}">
<Binding RelativeSource="{RelativeSource self}" Path="Name" />
<Binding RelativeSource="{RelativeSource AncestorType={x:Type DockPanel}}" Path="DataContext.ErrorFieldName" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay" />
</MultiBinding>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Background" Value="Red">
<Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource self}}" />
<Setter Property="Foreground" Value="White" />
</Trigger>
</Style.Triggers>
</Style>
und der Kontrolle:
<TextBox Name="FirstName" Text="{Binding FirstName}" Style="{StaticResource FieldToValidate}">
Das erwartete Ergebnis ist für den Bereich FirstName
um den Fokus und die Vordergrundfarbe weiß geändert, wenn die MultiBinding converter ändert sich die Hintergrundfarbe zu Rot, aber, während Sie im Feld hintergrund auf Rot wechselt, bekommt nicht den Fokus, noch die neue Vordergrundfarbe.
Fast scheint es, wie die XAML-parser verarbeitet den Trigger vor die Eigenschaft setter MultiBinding converter.
Alle Vorschläge willkommen!
InformationsquelleAutor der Frage BlazingFrog | 2011-05-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, die
Red
Pinsel in der angegebenen trigger und dieRed
Pinsel wieder durch den Konverter nicht als gleich angesehen, (weil Sie anders sind Instanzen), so wird der trigger nie ausgeführt. Trotzdem, es scheint nicht, eine sehr gute Idee, sich auf die Hintergrundfarbe auf trigger etwas...Sollten Sie Ihre Software so, dass Sie true zurückgibt, wenn ein Fehler Auftritt, und verwenden Sie es wie folgt:
Auch, die im Namen Ihres converter, Sie meinte wohl "visual cue", nicht "Warteschlange" 😉
InformationsquelleAutor der Antwort Thomas Levesque