/ / Issue ao misturar o conversor MultiBinding e Trigger em grande estilo - .net, xaml, triggers, multibinding

Problema ao misturar o conversor MultiBinding e o Trigger em estilo - .net, xaml, triggers, multibinding

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 № 1

Eu 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" ;)