2011-01-10 20 views
5

Tengo problemas con Condition para MultiTrigger. Si hago lo siguiente:WPF: Enlace de condición frente a propiedad, XamlParseException utilizando

<Condition Binding="{Binding RelativeSource={RelativeSource 
    AncestorType={x:Type ListView}}}" Property="IsEnabled" Value="True"/> 

entonces consigo esta excepción:

condición no se puede utilizar tanto la propiedad y encuadernación. Error en 'System.Windows.Condition' objeto en el archivo marcado

Sin embargo, cuando lo haga lo siguiente:

<Condition Binding="{Binding RelativeSource={RelativeSource 
    AncestorType={x:Type ListView}}, Path=IsEnabled}" Value="True"/> 

entonces consigo esta excepción:

debe especificar tanto la propiedad y Value for Trigger. Error en el objeto 'System.Windows.Condition' en el archivo de marcado

¿Qué ofrece? Si es importante, aquí está el disparador completo:

<MultiTrigger> 
    <MultiTrigger.Conditions> 
     <Condition Binding="{Binding Path=IsSelected}" Value="True"/> 
     <Condition Binding="{Binding Path=ItemsControl.AlternationIndex}" 
        Value="0"/> 
     <Condition Binding="{Binding RelativeSource={RelativeSource 
      AncestorType={x:Type ListView}}, Path=IsEnabled}" 
        Value="True"/> 
    </MultiTrigger.Conditions> 
    <Setter Property="Background" 
      Value="{StaticResource evenSelected}" /> 
    <Setter Property="BorderBrush" 
      Value="{StaticResource evenSelectedBorder}" /> 
</MultiTrigger> 

Respuesta

10

La API en este caso es confusa. Condition se usa para dos tipos diferentes de disparadores múltiples, y las propiedades utilizadas son diferentes. Al usar MultiTrigger, usará las propiedades Property y Value. Cuando usa MultiDataTrigger (que es lo que necesita), especifica un Binding y un Value. Entonces, si solo cambia su código para usar un MultiDataTrigger, estará listo:

<MultiDataTrigger> 
    <MultiDataTrigger.Conditions> 
     <Condition Binding="{Binding Path=IsSelected}" Value="True"/> 
     <Condition Binding="{Binding Path=ItemsControl.AlternationIndex}" 
        Value="0"/> 
     <Condition Binding="{Binding RelativeSource={RelativeSource 
      AncestorType={x:Type ListView}}, Path=IsEnabled}" 
        Value="True"/> 
    </MultiDataTrigger.Conditions> 
    <Setter Property="Background" 
      Value="{StaticResource evenSelected}" /> 
    <Setter Property="BorderBrush" 
      Value="{StaticResource evenSelectedBorder}" /> 
</MultiDataTrigger> 
+1

¡Estupendo, gracias! Ya no recibo 'XamlParseException', aunque no debo tener la última' Condición' todavía, porque mis setters ya no funcionan en los elementos habilitados 'ListView'. –

Cuestiones relacionadas