0

我想创建一个 MultiDataTrigger。在其中一种情况下,我需要使用转换器。由于它只在那里使用,我不想将转换器定义为资源,而只在本地使用它。

所以我做了这个MultiDataTrigger:

<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition Binding="Property1" Value="Value1" />
        <Condition ... />
    </MultiDataTrigger.Conditions>
    <Setter Property="SomeProp" Value="SomeVal"/>
</MultiDataTrigger>

以及此绑定以避免将转换器定义为资源(​​基于https://stackoverflow.com/a/2304330/5333340):

<Binding Path="Property2">
    <Binding.Converter>
        <converterNamespace:MyConverter/>
    </Binding.Converter>
</Binding>

并将这两部分放在一起:

<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition Binding="Property1" Value="Value1" />
        <Condition Value="Value2">
            <Binding Path="Property2">                 <!-- Compiler -->
                <Binding.Converter>                    <!-- does     -->
                    <converterNamespace:MyConverter/>  <!-- not      -->
                </Binding.Converter>                   <!-- like     -->
            </Binding>                                 <!-- this!    -->
        </Condition>
    </MultiDataTrigger.Conditions>
    <Setter Property="SomeProp" Value="SomeVal"/>
</MultiDataTrigger>

但编译器抱怨:“类型'条件'不支持直接内容。” (原文:“Der Typ 'Condition' unterstützt keine direkten Inhalte。”)

有没有办法让 MultiDataTrigger 工作而无需将转换器定义为资源?

4

1 回答 1

2

您的 XAML 缺少<Condition.Binding>标记。除此之外,Binding="{Property1}"也是无效的。

<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding Property1}" Value="Value1" />
        <Condition Value="Value2">
            <Condition.Binding>                   <!-- here -->
                <Binding Path="Property2">
                    <Binding.Converter>
                        <converterNamespace:MyConverter/>
                    </Binding.Converter>
                </Binding>
            </Condition.Binding>
        </Condition>
    </MultiDataTrigger.Conditions>
</MultiDataTrigger>
于 2016-10-10T12:29:40.287 回答