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

时间:2011-06-14 14:14:27

标签: wpf mvvm binding triggers datatrigger

我想在屏幕上显示一个数字。如果该数字为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解析错误,告诉我需要使用事件触发器。

我尝试将setter中的值设置为一个数字,以确保空值不会导致问题

1 个答案:

答案 0 :(得分:8)

您正在使用绑定来设置文本属性。

我将控件折叠/隐藏,而不是将文本设置为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>
  1. 只有一个Style允许DataTriggers。
  2. xaml解析器想要检查属性的存在,因此它需要ownertype。可见性在UIElement类上声明。正如我在两个例子中所示,有两种方法可以指定。