TextBlock触发器而不是使用转换器

问题描述

| 我想在屏幕上显示一个数字。如果该数字为0,我根本不希望它显示
<TextBlock Text=\"{Binding Path=Class.Count}\" FontSize=\"20\" FontWeight=\"Bold\">
    <TextBlock.Triggers>
        <DataTrigger Binding=\"{Binding Path=Class.Count}\" Value=\"0\">
            <Setter Property=\"TextBlock.Text\" Value=\"\"/>
        </DataTrigger>
    </TextBlock.Triggers>
</TextBlock>
在常规触发器未能解决我的问题之后,我尝试了上面的代码。我不想编写一个转换器来处理一个特定的数字。有没有一种方法可以创建一个触发器来隐藏数字(如果为0)呢? 编辑:当我尝试使用常规触发器或数据触发器时,出现xaml解析错误,告诉我需要使用事件触发器。 我试图将设置器中的值设置为一个数字,以确保使用空白值不会引起问题     

解决方法

        您正在与设置文本属性的绑定作斗争。 我要使控件折叠/隐藏,而不是将文本设置为String.Empty。 减少混乱。 编辑
<TextBox>
    <TextBox.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding=\"{Binding Name.Length}\" Value=\"0\">
                    <Setter Property=\"UIElement.Visibility\" Value=\"Collapsed\"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>
要么
<TextBox>
    <TextBox.Style>
        <Style TargetType=\"TextBox\">
            <Style.Triggers>
                <DataTrigger Binding=\"{Binding Name.Length}\" Value=\"0\">
                    <Setter Property=\"Visibility\" Value=\"Collapsed\"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>
只有样式允许DataTriggers。 xaml解析器要检查属性的存在,因此需要所有者类型。可见性在UIElement类上声明。正如我在两个示例中所示,有两种指定方法。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...