非空字符串时的触发条件
本文关键字:条件 字符串 | 更新日期: 2023-09-27 18:04:37
我们可以检查一些控件的字符串属性是空的,像下面的代码:
<Trigger SourceName="atCaption" Property="Text" Value="{x:Static sys:String.Empty}">
<Setter TargetName="imgBack" Property="Margin" Value="0"/>
<Setter TargetName="atCaption" Property="Margin" Value="0"/>
</Trigger>
但是,如何定义一个基于'非空'字符串的条件?
<!--unfortunately, can't accept '!=' operator in xaml.-->
<Trigger SourceName="atCaption" Property="Text" Value!="{x:Static sys:String.Empty}">
<Setter TargetName="imgBack" Property="Margin" Value="0"/>
<Setter TargetName="atCaption" Property="Margin" Value="0"/>
</Trigger>
通过WPF-it来增加答案(对我来说这是一个永久的解决方案,而不是快速修复)
<DataTrigger Binding="{Binding VolumeGroup}" Value="{x:Null}">
<Setter Property="Background" Value="{StaticResource DataGridBackground}" />
</DataTrigger>
<DataTrigger Binding="{Binding VolumeGroup}" Value="">
<Setter Property="Background" Value="{StaticResource DataGridBackground}" />
</DataTrigger>
</Style.Triggers>
<!--inverted rare case: VolumeGroup will usually be empty so cells will be {StaticResource DataGridBackground}-->
<Setter Property="Background" Value="DarkOliveGreen" />
使用ValueConverter是一个解决方案。
当使用MVVM时,你可以考虑在你绑定的ViewModel类上添加一个额外的属性,该属性决定了控件应该如何显示。
当我使用mvvm解决这个问题的方式时,我不需要触发器,我只需要向ViewModel添加额外的属性,并将视图的属性绑定到这些额外的属性来操作视图
为了快速解决这个问题,应用于反向条件的值应该在元素声明或样式中默认,然后使用直接相等条件来更改值。
。
假设margin 5是你为空字符串设置的,0是你必须为非空字符串设置的,那么你将默认设置0作为Style中的简单Setter,然后使用Trigger检查空字符串并设置5。确保在Style.
如果你使用数据触发器,它使用绑定语法,所以你可以使用IValueConverter类将属性转换为布尔值。您可以在自定义IValueConverter内的代码中编写您想要发生的检查。