2011-05-05 9 views
11

Ajuste del estilo en <UserControl.Resources> (suponiendo que el convertidor devuelve el color rojo)Edición mientras se mezcla convertidor MultiBinding y el gatillo en estilo

<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 para obtener el enfoque y el color de primer plano cambia a blanco cuando el convertidor de enlaces múltiples cambia el color de fondo a rojo pero, mientras el fondo del campo cambia a rojo, no obtiene el foco ni el nuevo color de primer plano.

Parece que el analizador XAML procesa el Trigger antes de el convertidor multibrazo de la propiedad.

¡Todas y cada una de las sugerencias son bienvenidas!

Respuesta

22

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

Debe cambiar su convertidor para que devuelva cierto cuando se produce un error, y lo utilizan 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 su convertidor, es probable que significaba "visual señal", no "cola";)

+0

que había estado buscando una manera elegante de combinar el gatillo y la MultiBinding pero no encontré nada, así que recurrí al disparador basado en el color ... Hasta que llegaste ¡a lo largo! ¡Acabo de probar tu solución y funciona muy bien! No he probado reemplazando "Cola" con "cue", pero estoy bastante seguro de que funcionará ...;) Merci. – BlazingFrog

Cuestiones relacionadas