Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以为非布尔属性创建基于或的多重触发器(或类似的)?_C#_Wpf_Xaml_Triggers - Fatal编程技术网

C# 是否可以为非布尔属性创建基于或的多重触发器(或类似的)?

C# 是否可以为非布尔属性创建基于或的多重触发器(或类似的)?,c#,wpf,xaml,triggers,C#,Wpf,Xaml,Triggers,我们有一个名为SelectorSwitchedControl的控件,它使用选择器在子控件之间切换。按照简化的选项卡控件的思路思考,它使用组合框或列表框而不是选项卡 我们试图构建一个触发器,该触发器表示如果列表中有多个项,则需要显示选择器 我唯一能想到的是使用两个触发器,而不是一个。默认情况下,在控件的模板中使选择器可见,然后创建两个单独的触发器来隐藏选择器:第一个触发器对零项进行条件测试,第二个触发器对1项进行测试。如果其中任何一个匹配,选择器将隐藏。如果没有,即有两个或多个项目,那么它将保持可

我们有一个名为SelectorSwitchedControl的控件,它使用
选择器
在子控件之间切换。按照简化的选项卡控件的思路思考,它使用
组合框
列表框
而不是选项卡

我们试图构建一个触发器,该触发器表示如果列表中有多个项,则需要显示选择器

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

它是有效的,但我想知道是否有任何方法可以使用单个触发器创建这种行为,即使它是一个多触发器。但多触发器是一个“And”测试,而我们需要一个“Or”测试。通常,您可以反转逻辑,将多触发器更改为“或”,但这将要求属性本身是布尔值,因为单个测试不存在“不”条件(即,您不能说“属性不等于0且不等于1”)

作为记录,我知道我可以很容易地使用转换器和/或代码隐藏来解决这一问题,但我想知道是否有一种纯粹的XAML方法来实现这一点,以便这种行为可以是一种没有其他代码依赖性的样式。

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

然后,您可以使用一个触发器,该触发器将同时适用于0和1

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


这样你就不必担心单触发器了。转换器和绑定将为您完成此任务。

是的,我了解转换器。但这并不是一种纯粹的XAML方法,我想知道这是否可能。我能想到的只有两个触发点。作为记录,我试图避免转换器而采用纯XAML的原因是,这可能是一种没有其他代码依赖关系的纯样式行为。我想,使用纯XAML方法,您已经取得了尽可能好的效果。XAML中没有这样的
操作。你必须求助于转换器。是的。。。我就是这么想的。遗憾的是,微软没有将这一点添加到规范中。看起来添加起来很简单,但当然,可能会有我没有考虑过的后果。再说一次,我们也可以编写自己的或多重绑定,虽然从技术上来说,就像你说的,我们可以用转换器做同样的事情。是的,没错。我不认为这将是任何未来版本的WPF规范的一部分。MS太懒了,不愿意添加任何已经存在解决方法的转换器。