使用 DataTrigger 写入 'Yes' 或 'No'
Using a DataTrigger to write 'Yes' or 'No'
我想将布尔值 (true/false) 分别转换为文本 'Yes' 或 'No'。我可以通过使用两个 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>
但是,似乎有一个更简单(也更容易阅读)的解决方案来解决这个问题。是否可以创建某种转换器、使用回退值或以其他方式简化我的代码?
我已经尝试将文本设置为默认的 'No',然后只有 DataTrigger
用于 'Yes',但这似乎不起作用。
I have tried to set the text to 'No' as default, and then only have the DataTrigger
for 'Yes', but this does not appear to work.
如果您在 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";
我想将布尔值 (true/false) 分别转换为文本 'Yes' 或 'No'。我可以通过使用两个 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>
但是,似乎有一个更简单(也更容易阅读)的解决方案来解决这个问题。是否可以创建某种转换器、使用回退值或以其他方式简化我的代码?
我已经尝试将文本设置为默认的 'No',然后只有 DataTrigger
用于 'Yes',但这似乎不起作用。
I have tried to set the text to 'No' as default, and then only have the
DataTrigger
for 'Yes', but this does not appear to work.
如果您在 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";