我有一个绑定到十进制值的TextBox,我希望将其格式化为不显示十进制值(如果它们为零)。同时,如果属性值为零而另一个布尔属性为true,则我想将Background更改为一种颜色。
我设法实现了两者,但没有一起实现。如果我从下面的“文本绑定”中删除StringFormat,则“背景”可以正常工作,但是例如10的值显示为10.00,这是我不希望的。使用StringFormat时,未设置Background,并且TextBox为0时为空,并且根据需要抑制小数(如果为零)(可接受零的空字符串)。因此,我认为它与空字符串有关。我确实尝试按照另一篇文章中的建议使用Path = Text.IsEmpty和value =“ True”测试一个空字符串,但这给出了设计时错误,即在String类型上找不到Property IsEmpty。
这是我到目前为止所拥有的。
<TextBox x:Name="FactorValueTextBox" Text="{Binding Value, StringFormat={}{0:# ###.##}}" IsReadOnly="{Binding CommodityGradingFactor.Total}" GotKeyboardFocus="GradeFactorGotKeyboardFocus">
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Text}" Value="0"/>
<Condition Binding="{Binding CommodityGradingFactor.Manditory}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="LightPink"/>
</MultiDataTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True"/>
<Condition Property="IsReadOnly" Value="False"/>
</MultiTrigger.Conditions>
<Setter Property="FontSize" Value="15"/>
<Setter Property="FontWeight" Value="Bold"/>
</MultiTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
为完整起见,当用户将标签页拖入TextBox时,GotKeyboardFocus函数仅选择当前值
private void GradeFactorGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
if (e.KeyboardDevice.IsKeyDown(Key.Tab))
((TextBox)sender).SelectAll();
}
而不是将条件绑定到属性Text
<Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Text}" Value="0"/>
为什么不将其绑定到属性Value
<Condition Binding="{Binding Value}" Value="0"/>