mjk*_*026 13 c# wpf xaml triggers
当然,我们可以像下面的代码一样检查一些控件的字符串属性是否为空:
<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>
Run Code Online (Sandbox Code Playgroud)
然后,如何定义一个"非空"字符串的条件?
<!--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>
Run Code Online (Sandbox Code Playgroud)
帮我.
小智 6
通过WPF来增加答案 - 对我来说这是一个永久的解决方案,而不是快速修复
<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" />
Run Code Online (Sandbox Code Playgroud)
使用ValueConverter是一种解决方案。
使用MVVM时,可以考虑绑定到ViewModel类上的额外属性,该属性确定控件的显示方式。
当我使用MVVM来解决此问题时,我不需要触发器,我只是向ViewModel添加了额外的属性,然后将View的属性绑定到这些额外的属性以操纵View
为了快速解决这个问题,应用于反向条件的值应该在元素声明或样式中默认,然后使用直接相等条件来改变值。
例如
假设边距 5 是您为空字符串设置的值,而 0 是您必须为非空字符串设置的值,那么您将默认设置 0 作为样式中的简单 Setter,然后使用 Trigger 检查空字符串并设置 5。确保默认设置器(用于 0)出现在样式中的触发器(用于 5)之前。