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

Sar*_*els 5 wpf xaml binding triggers multitrigger

我遇到麻烦ConditionMultiTrigger.如果我执行以下操作:

<Condition Binding="{Binding RelativeSource={RelativeSource
    AncestorType={x:Type ListView}}}" Property="IsEnabled" Value="True"/>
Run Code Online (Sandbox Code Playgroud)

然后我得到这个例外:

条件不能同时使用Property和Binding.标记文件中对象'System.Windows.Condition'出错

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

<Condition Binding="{Binding RelativeSource={RelativeSource
    AncestorType={x:Type ListView}}, Path=IsEnabled}" Value="True"/>
Run Code Online (Sandbox Code Playgroud)

然后我得到这个例外:

必须为Trigger指定Property和Value.标记文件中对象'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>
Run Code Online (Sandbox Code Playgroud)

Abe*_*cht 11

在这种情况下,API令人困惑. Condition用于两种不同类型的多触发器,并且使用的属性是不同的.使用时MultiTrigger,您将使用PropertyValue属性.使用时MultiDataTrigger(这是您需要的),您指定a Binding和a Value.所以,如果您只是将代码切换为使用a 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>
Run Code Online (Sandbox Code Playgroud)