如果result返回null,则给出TextBlock默认值

时间:2013-05-17 15:19:53

标签: c# wpf xaml textblock

您好我正在尝试为文本块提供默认值,如果返回的结果为空

这是我正在尝试的!

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

 <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 个答案:

答案 0 :(得分:18)

您可以使用TargetNullValue Property。如果绑定返回Null,则返回TargetNullValue而不返回StringFormat

<TextBlock Text="{Binding Name, StringFormat='Item Name: {0}', TargetNullValue='No Name Found'}" />

答案 1 :(得分:3)

您可以直接在绑定中使用TargetNullValue属性。

<TextBox Text='{Binding Path=LastName, TargetNullValue="No name found."}' />

答案 2 :(得分:1)

我将TextBlock绑定到一个没有返回null的对象的属性;使您的属性返回默认值。看来你总是希望FontStyle是Italic,所以我只想在Triggers外部构建它。

答案 3 :(得分:0)

在我的应用程序中,我发现将触发器绑定到我的控件绑定的实际对象更加可靠。所以,如果我在VM中查看Name以绑定实际文本,我也会将我的数据触发器绑定到该文件。

<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>