trigger style .net xaml triggers multibinding

.net - style - Problema al mezclar convertidor MultiBinding y Trigger en estilo



trigger xaml (1)

Configuración del estilo en <UserControl.Resources> (suponiendo que el convertidor devuelve el color Rojo)

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

y el control:

<TextBox Name="FirstName" Text="{Binding FirstName}" Style="{StaticResource FieldToValidate}">

El resultado esperado es que el campo FirstName obtenga el foco y el color de primer plano cambie a blanco cuando el convertidor de enlaces múltiples cambie el color de fondo a Rojo pero, mientras el fondo del campo cambie a Rojo, no obtenga el foco ni el primer plano color.

Casi parece que el analizador XAML procesa el disparador antes del convertidor de enlace múltiple del configurador de propiedades.

¡Todas y cada una de las sugerencias son bienvenidas!


Creo que el pincel Red especificado en el desencadenador y el pincel Red devuelto por el convertidor no se consideran iguales (porque son instancias diferentes), por lo que el desencadenador nunca se ejecuta. De todos modos, no parece una buena idea confiar en el color de fondo para disparar algo ...

Debe cambiar su convertidor para que devuelva verdadero cuando se produce un error, y úselo de la siguiente manera:

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

Además, en el nombre de tu convertidor, probablemente quisiste decir " señal visual", no " cola" ;)