WPF:条件绑定与属性,使用XamlParseException

时间:2011-01-10 18:06:48

标签: wpf xaml binding triggers multitrigger

我遇到Condition MultiTrigger的问题。如果我执行以下操作:

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

然后我得到了这个例外:

  

条件不能同时使用Property和Binding。标记文件

中对象'System.Windows.Condition'出错

但是,当我执行以下操作时:

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

然后我得到了这个例外:

  

必须为触发器指定属性和值。标记文件

中对象'System.Windows.Condition'出错

是什么给出的?如果重要,这就是整个触发器:

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

1 个答案:

答案 0 :(得分:11)

这种情况下的API令人困惑。 Condition用于两种不同类型的多触发器,并且使用的属性不同。使用MultiTrigger时,您将使用PropertyValue属性。使用MultiDataTrigger(这是您需要的)时,您需要指定BindingValue。因此,如果您只是将代码切换为使用MultiDataTrigger,那么您将会很高兴:

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