如果条件与&&和||在WPF中的样式触发器

时间:2013-08-30 09:47:10

标签: wpf wpftoolkit

if((a&&(b || c || d))||(e&&(f || g || h)))

然后设置按钮Isenabled属性为真

我想在WPF中使用样式触发器中的按钮实现此功能。

提前致谢。

3 个答案:

答案 0 :(得分:1)

最简单的方法是将所有这些使用Mutlivalueconverter绑定到样式中的IsEnable属性,并将此逻辑放在转换器的Convert方法中:

<Style TargetType={x:Type Button}>
<Setter Property="IsEnabled">
                        <Setter.Value>
                            <MultiBinding Converter="{StaticResource MyConverter}">
                            <Binding Path="a"/>
                            <Binding Path="b"/>
                            <Binding Path="c"/>
                            <Binding Path="d"/>
                            <Binding Path="e"/>
                            <Binding Path="f"/>
                            <Binding Path="g"/>
                            <Binding Path="h"/>
                            </MultiBinding>
                        </Setter.Value>
                    </Setter>
</Style>

这里MyConverter是多值转换器。

由于

答案 1 :(得分:1)

没有||在MultiDataTrigger中。您必须使用多个触发器。在不使用||的情况下获取表达式并提取所有子表达式当按钮启用时:

  • a&amp;&amp; B'/ LI>
  • a&amp;&amp; ç
  • a&amp;&amp; d
  • e&amp;&amp; ˚F
  • e&amp;&amp;克
  • e&amp;&amp; ħ

现在,他们每个人都在你的Style中构建一个MultiDataTrigger,它将按钮的Enabled属性设置为true。就是这样。

答案 2 :(得分:0)

正如其他人所提到的,WPF中没有对任意布尔表达式的内置支持。

但是,如果您愿意添加第三方软件,PyBinding允许您在WPF绑定中使用Python表达式:

<Button IsEnabled="{p:PyBinding $[.a] and ($[.b] or $[.c] or $[.d]) ... }"/>