Definir o estilo em <UserControl.Resources>
(assumindo que o conversor retorna a cor Red)
<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>
e o controle:
<TextBox Name="FirstName" Text="{Binding FirstName}" Style="{StaticResource FieldToValidate}">
O resultado esperado é para o campo FirstName
para obter o foco e a cor de primeiro plano mudoupara branco quando o conversor MultiBinding muda a cor de fundo para vermelho, mas, enquanto o fundo do campo muda para vermelho, ele não obtém o foco nem a nova cor de primeiro plano.
Quase parece que o analisador XAML processa o Trigger antes o conversor MultiBinding do configurador de propriedade.
Qualquer e todas as sugestões bem-vindas!
Respostas:
24 para resposta № 1Eu acho que o Red
escova especificado no gatilho e o Red
escova devolvida pelo conversor não sãoconsiderados iguais (porque são instâncias diferentes), então o gatilho nunca é executado. De qualquer forma, não parece uma boa ideia confiar na cor de fundo para desencadear algo ...
Você deve alterar seu conversor para que ele retorne verdadeiro quando ocorrer um erro e usá-lo da seguinte maneira:
<Style x:Key="FieldToValidate" TargetType="{x:Type TextBox}">
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<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>
</DataTrigger.Binding>
<Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource self}}" />
<Setter Property="Background" Value="Red" />
<Setter Property="Foreground" Value="White" />
</DataTrigger>
</Style.Triggers>
</Style>
Além disso, no nome do seu conversor, você provavelmente quis dizer "visual sugestão", não "fila" ;)