是否可以为非布尔属性创建基于or的MultiTrigger(或类似)?

时间:2013-11-07 19:21:35

标签: c# wpf xaml triggers

我们有一个名为SelectorSwitchedControl的控件,它使用Selector在子控件之间切换。按照简化的Tab控件的思路,但使用ComboBoxListBox代替标签。

我们正在尝试构建一个触发器,指出如果列表中有多个项目,我们需要显示选择器。

我唯一能想到的是使用两个触发器,而不是一个。您可以在控件的模板中默认显示选择器,然后创建两个单独的触发器来隐藏选择器:第一个条件测试零项,第二个测试1个项目。如果其中任何一个匹配,则选择器将隐藏。如果没有 - 即。有两个或更多的项目 - 然后它将保持可见。

它有效,但我再次想知道是否有任何方法可以使用单个触发器创建此行为,即使它是MultiTrigger。但是MultiTrigger是一个'And'测试,而我们需要一个'Or'测试。通常你可以反转逻辑来改变一个MultiTrigger,使其表现得像'Or',但是这需要属性是布尔本身,因为对于单个测试没有'Not'条件(即你不能说'属性')不等于0且不等于1')。

为了记录,我知道我可以轻松地使用转换器和/或代码隐藏作为解决此问题的方法,但我想知道是否有一种纯粹的XAML方法来做到这一点,所以这种行为可能是一个风格的没有其他代码依赖。

1 个答案:

答案 0 :(得分:1)

是的,创建一个IValueConverterLessThanOrEqualConverter,它会将列表计数作为输入,并根据列表计数大于0或1返回true或false。

然后,你可以使用单个触发器,它同时适用于0和1。

只需拥有一个转换器LengthToBoolConverter并将您的可见性绑定到该转换器。如果长度小于或等于1,转换器将返回Visibility.Collapsed,否则返回Visibility.Visible

这样您就不必担心单次触发了。转换器和绑定将为您做到这一点。