2011-01-10 7 views
5

Ich habe Probleme mit einem Condition für einen MultiTrigger. Wenn ich folgendes tun:WPF: Bedingung Bindung gegen Eigenschaft, XamlParseException mit

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

Dann bekomme ich diese Ausnahme:

Zustand nicht beide Eigentum verwenden können und Bindung. Fehler beim Objekt 'System.Windows.Condition' in Markup-Datei

Allerdings, wenn ich wie folgt vorgehen:

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

Dann bekomme ich diese Ausnahme:

beide Eigenschaft angeben müssen und Wert für Trigger. Fehler am Objekt 'System.Windows.Condition' in der Markup-Datei

Was gibt? Wenn es darauf ankommt, hier ist der gesamte Trigger:

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

Antwort

10

Die API in diesem Fall ist verwirrend. Condition wird für zwei verschiedene Arten von Mehrfachauslösern verwendet, und die verwendeten Eigenschaften sind unterschiedlich. Wenn Sie MultiTrigger verwenden, verwenden Sie die Eigenschaften Property und Value. Wenn Sie MultiDataTrigger verwenden (was Sie benötigen), geben Sie eine Binding und eine Value an. Also, wenn Sie nur Ihren Code um eine MultiDataTrigger zu verwenden, werden Sie gut zu gehen:

<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

Großartig, danke! Ich bekomme nicht mehr die 'XamlParseException', obwohl ich noch nicht die letzte 'Condition' haben darf, da meine Setter nicht mehr auf aktivierten' ListView'-Elementen funktionieren. –