如果结果返回 null,给 TextBlock 设置默认值

7

你好,我正在尝试为文本块设置默认值,如果返回的结果为空

这是我的尝试:

所有返回的只是我设置的字符串格式!

 <TextBlock x:Name="NameTxtBlock" Grid.Column="0" Margin="0,0,40,0" FontFamily="Segoe UI" FontSize="14" Text="{Binding Name, StringFormat='Item Name: {0}'}"  Padding="2">
    <TextBlock.Style>
        <Style TargetType="TextBlock" >                                            
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=NameTxtBlock, Path=Text}" Value="{x:Null}">
                    <Setter Property="FontStyle" Value="Italic"/>
                    <Setter Property="Text" Value="No Name Found" />
                </DataTrigger>
                <DataTrigger Binding="{Binding ElementName=NameTxtBlock, Path=Text}" Value="{x:Static System:String.Empty}">
                    <Setter Property="FontStyle" Value="Italic"/>
                    <Setter Property="Text" Value="No Name Found" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>
4个回答

22
你可以使用 TargetNullValue 属性。如果绑定返回 Null,则此属性将返回不带 StringFormat TargetNullValue
<TextBlock Text="{Binding Name, StringFormat='Item Name: {0}', TargetNullValue='No Name Found'}" />

3
您可以直接在绑定中使用TargetNullValue属性。
<TextBox Text='{Binding Path=LastName, TargetNullValue="No name found."}' />

1

在我的应用程序中,我发现将触发器绑定到实际对象比较可靠,因此,如果我想要绑定实际文本的VM中的名称,我也会将数据触发器绑定到它。

<TextBlock x:Name="NameTxtBlock" Grid.Column="0" Margin="0,0,40,0" FontFamily="Segoe UI" FontSize="14" Text="{Binding Name, StringFormat='Item Name: {0}'}"  Padding="2">
<TextBlock.Style>
    <Style TargetType="TextBlock" >                                            
        <Style.Triggers>
            <DataTrigger Binding="{Binding Name}" Value="{x:Null}">
                <Setter Property="FontStyle" Value="Italic"/>
                <Setter Property="Text" Value="No Name Found" />
            </DataTrigger>
            <DataTrigger Binding="{Binding Name}" Value="">
                <Setter Property="FontStyle" Value="Italic"/>
                <Setter Property="Text" Value="No Name Found" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</TextBlock.Style>


1
此外,您可以使用相对源 <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Text}" Value=""> - TrialAndError
不错的方法!起初它对我的情况(使用 TextBox)没有起作用,所以我不得不使用 <Setter Property="Text" Value="{Binding Whatever}" />(正如另一个答案中建议的那样)。 - AntonK

1
我会将TextBlock绑定到一个不返回null的对象属性上;让你的属性返回一个默认值。似乎你总是想要字体样式为Italic,所以我建议在Triggers之外直接构建这个样式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接