C# 是否可以为非布尔属性创建基于或的多重触发器(或类似的)?
我们有一个名为SelectorSwitchedControl的控件,它使用C# 是否可以为非布尔属性创建基于或的多重触发器(或类似的)?,c#,wpf,xaml,triggers,C#,Wpf,Xaml,Triggers,我们有一个名为SelectorSwitchedControl的控件,它使用选择器在子控件之间切换。按照简化的选项卡控件的思路思考,它使用组合框或列表框而不是选项卡 我们试图构建一个触发器,该触发器表示如果列表中有多个项,则需要显示选择器 我唯一能想到的是使用两个触发器,而不是一个。默认情况下,在控件的模板中使选择器可见,然后创建两个单独的触发器来隐藏选择器:第一个触发器对零项进行条件测试,第二个触发器对1项进行测试。如果其中任何一个匹配,选择器将隐藏。如果没有,即有两个或多个项目,那么它将保持可
选择器
在子控件之间切换。按照简化的选项卡控件的思路思考,它使用组合框
或列表框
而不是选项卡
我们试图构建一个触发器,该触发器表示如果列表中有多个项,则需要显示选择器
我唯一能想到的是使用两个触发器,而不是一个。默认情况下,在控件的模板中使选择器可见,然后创建两个单独的触发器来隐藏选择器:第一个触发器对零项进行条件测试,第二个触发器对1项进行测试。如果其中任何一个匹配,选择器将隐藏。如果没有,即有两个或多个项目,那么它将保持可见
它是有效的,但我想知道是否有任何方法可以使用单个触发器创建这种行为,即使它是一个多触发器。但多触发器是一个“And”测试,而我们需要一个“Or”测试。通常,您可以反转逻辑,将多触发器更改为“或”,但这将要求属性本身是布尔值,因为单个测试不存在“不”条件(即,您不能说“属性不等于0且不等于1”)
作为记录,我知道我可以很容易地使用转换器和/或代码隐藏来解决这一问题,但我想知道是否有一种纯粹的XAML方法来实现这一点,以便这种行为可以是一种没有其他代码依赖性的样式。是的,创建一个sayLessThanOrEqualConverter
,它将列表计数作为输入,并根据列表计数大于0或1返回true或false
然后,您可以使用一个触发器,该触发器将同时适用于0和1
或
只需拥有一个转换器LengthToBoolConverter
,并将您的可见性绑定到该转换器即可。如果长度小于或等于1,转换器将返回Visibility.Collapsed
,否则返回Visibility.Visibility
这样你就不必担心单触发器了。转换器和绑定将为您完成此任务。是的,我了解转换器。但这并不是一种纯粹的XAML方法,我想知道这是否可能。我能想到的只有两个触发点。作为记录,我试图避免转换器而采用纯XAML的原因是,这可能是一种没有其他代码依赖关系的纯样式行为。我想,使用纯XAML方法,您已经取得了尽可能好的效果。XAML中没有这样的
或操作。你必须求助于转换器。是的。。。我就是这么想的。遗憾的是,微软没有将这一点添加到规范中。看起来添加起来很简单,但当然,可能会有我没有考虑过的后果。再说一次,我们也可以编写自己的或多重绑定,虽然从技术上来说,就像你说的,我们可以用转换器做同样的事情。是的,没错。我不认为这将是任何未来版本的WPF规范的一部分。MS太懒了,不愿意添加任何已经存在解决方法的转换器。