2013-05-17 14 views
6

Ciao Sto cercando di dare un valore predefinito a un blocco di testo, se i risultati restituiti sono nulliDare TextBlock Valore predefinito se il risultato restituisce null

Ecco che cosa sto provando!

Tutto ciò che restituisce è il formato stringa impostato!

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

risposta

18

È possibile utilizzare TargetNullValue Property. Ciò restituirà TargetNullValue senza StringFormat se l'associazione restituisce Null.

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

Associare il TextBlock a una proprietà di un oggetto che non ha restituito null; rendere la proprietà restituire un valore predefinito. Sembra che tu voglia sempre che FontStyle sia in corsivo, quindi lo svilupperei solo all'esterno dei trigger.

3

È possibile utilizzare la proprietà TargetNullValue direttamente in un'associazione.

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

Nelle mie applicazioni, trovo più affidabile associare i trigger all'oggetto effettivo a cui è destinato il controllo. Quindi, se guardo Nome nella VM per l'associazione del testo reale, legherei anche il trigger dei miei dati a quello.

<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

Inoltre, è possibile utilizzare fonte relativa TrialAndError