c# - 如何在 MultiDataTrigger 中创建逻辑“或”行为
问题描述
XAML
<TextBlock FontSize="14" Foreground="Red">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<!--Here I want to compare with an OR behavior-->
<Condition Binding="{Binding Username}" Value="" />
<Condition Binding="{Binding Username}" Value="{x:Null}"/>
</MultiDataTrigger.Conditions>
<Setter Property="Text" Value="No Username"/>
<Setter Property="Visibility" Value="Visible"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
要触发这个,必须Username
是这样null
,empty
这没有任何意义。事实上,我想要一个具有这两个值的 OR 行为。
笔记
我知道我可以添加多个<DataTrigger>
(例如在MultiDataTrigger 中使用 OR 而不是 AND)并且因为它们是按顺序处理的,但这正是我想要避免的。我正在寻找更多的单线解决方案。
解决方案
如果 DataTrigger 应该为某个值和 工作null
,您可以使用Binding 的属性替换null
该值。TargetNullValue
TargetNullValue=''
替换null
为空字符串。
<TextBlock FontSize="14" Foreground="Red">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Username, TargetNullValue=''}" Value="">
<Setter Property="Text" Value="No Username"/>
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
也可以专门为空/空字符串制作可见性转换器,并且无需触发器即可工作:
<TextBlock FontSize="14" Foreground="Red" Text="No Username"
Visibility="{Binding Username, Converter={StaticResource MyStringToVisibiltyConverter}}"/>
其中 Convert 方法将类似于:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var str = value as string;
return String.IsNullOrEmpty(str) ? Visibility.Visible : Visibility.Collapsed;
}
推荐阅读
- c# - 确定列表视图的折叠组
- amazon-web-services - AWS IAM 自定义可重用操作组?
- javascript - 随机选择存储在数组中的对象中的图片 url
- ios - 如何修改基本 url 以在 iOS swift 中显示来自网络的多个图像
- oracle - 块 a 是控制块(值列表)块 b 是数据库块(块 a 中每个值的详细信息)
- javascript - 加载微调器的问题 - ReactJS
- ios - 在不同设备上将 pin 放置到 imageview 时出现问题
- python - 对多个功能重复相同的测试
- mysql - 无法登录到本地主机 Wordpress
- postgresql - 如何通过保持某些列值相同并更新其他列值来更新多行?