我想将布尔值(true / false)分别转换为文本“是”或“否”。我可以使用两个DataTrigger
来做到这一点,如下所示:
<TextBox>
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<DataTrigger Binding="{Binding MyBool}" Value="True">
<Setter Property="Text" Value="Yes" />
</DataTrigger>
<DataTrigger Binding="{Binding MyBool}" Value="False">
<Setter Property="Text" Value="No" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
然而,似乎对这个问题有一个更简单(也更容易阅读)的解决方案。是否可以创建某种转换器,使用回退值或以其他方式简化我的代码?
我尝试将文本设置为“否”作为默认值,然后仅将DataTrigger
设置为“是”,但这似乎不起作用。
答案 0 :(得分:1)
我试图将文字设置为“不”。默认设置,然后只有
DataTrigger
表示“是”&#39;,但这似乎不起作用。
如果您在setter中指定默认值,则会执行此操作:
<TextBox>
<TextBox.Style>
<Style TargetType="TextBox">
<Setter Property="Text" Value="No" />
<Style.Triggers>
<DataTrigger Binding="{Binding MyBool}" Value="True">
<Setter Property="Text" Value="Yes" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
如果你像这样在本地设置属性,它就不会工作:
<TextBox Text="No" ...>
那是因为本地值优先于样式设置的值。有关详细信息,请参阅MSDN:https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/dependency-property-value-precedence
另一种选择是定义一个值转换器:
WPF: Display a bool value as "Yes" / "No"
或者您可以绑定到只读字符串源属性,而不是直接绑定到MyBool
:
public string YesOrNo => MyBool ? "Yes" : "No";