-2

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

然后设置按钮 Isenabled 属性为 true

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

提前致谢。

4

3 回答 3

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 是 Multivalueconverter。

谢谢

于 2013-08-30T10:03:33.710 回答
1

没有|| 在 MultiDataTrigger 中。您必须改用多个触发器。取你的表达式并提取所有没有 || 的子表达式 何时启用按钮:

  • 一个 && 乙
  • 一个&&c
  • 广告
  • e&&f
  • e&&g
  • e&&h

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

于 2013-08-30T10:04:38.453 回答
0

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

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

<Button IsEnabled="{p:PyBinding $[.a] and ($[.b] or $[.c] or $[.d]) ... }"/>
于 2013-08-30T10:07:17.037 回答