使用MultiDataTrigger来测试0和在XAML中具有StringFormat的TextBox中的布尔值

问题描述 投票:0回答:1

我有一个绑定到十进制值的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();
    }
c# wpf xaml formatting
1个回答
0
投票

而不是将条件绑定到属性Text

<Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Text}" Value="0"/>

为什么不将其绑定到属性Value

<Condition Binding="{Binding Value}" Value="0"/>
© www.soinside.com 2019 - 2024. All rights reserved.