2009-10-25 5 views
5

Ich habe folgendes DataTemplate:Wie fügt man einem Textblock in einem DataTemplate ein StringFormat hinzu?

<DataTemplate x:Key="ColoringLabels"> 
    <TextBlock Padding="0" 
       Margin="0" 
       Name="Username" 
       Text="{Binding Username}" 
       Foreground="Gray" 
       FontStyle="Italic" 
       /> 
    <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding IsLoggedIn}" Value="True"> 
      <Setter TargetName="Username" Property="FontSize" Value="14"/> 
      <Setter TargetName="Username" Property="Foreground" Value="Green"/> 
      <Setter TargetName="Username" Property="FontStyle" Value="Normal"/> 
     </DataTrigger> 
    </DataTemplate.Triggers> 
</DataTemplate> 

Ich möchte die Vorlage in einem ListView verwenden, wo jeder Benutzernamen, gefolgt von einem ist; und ein Raum.

effektiv die Vorlage würde dann so verhalten, als es wie folgt geschrieben:

<DataTemplate x:Key="ColoringLabels"> 
    <TextBlock Padding="0" 
       Margin="0" 
       Name="Username" 
       Text="{Binding Username, StringFormat='{}{0}; '}" 
       Foreground="Gray" 
       FontStyle="Italic" 
       /> 
    <DataTemplate.Triggers> 
     ... 
    </DataTemplate.Triggers> 
</DataTemplate> 

Wie kann ich die ursprüngliche Vorlage erweitert das Ergebnis der zweiten zu bekommen?

+0

nicht sicher, was der Kern Ihrer Frage. Geht es um den StringFormat-Teil oder geht es darum, eine vorhandene Vorlage zu erweitern, um eine neue zu erhalten? Du hast eine Antwort an beide erhalten :-) –

Antwort

6

Es gibt keinen direkten Mechanismus, damit ein DataTemplate die Eigenschaften eines anderen DataTemplate erbt.

Sie können jedoch Code-Duplizierung erfolgreich vermeiden, indem Sie Stile verwenden, die über Vererbungsfunktionen verfügen.

Ich glaube, das würden Sie geben, was Sie brauchen:

<Style x:Key="StandardBoundTb" TargetType="TextBlock"> 
     <Setter Property="Padding" Value="0" /> 
     <Setter Property="Margin" Value="0" /> 
     <Setter Property="Text" Value="{Binding Path=Username}" /> 
     <!-- etc --> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Path=IsLoggedIn}" Value="True"> 
       <Setter Property="FontSize" Value="14" /> 
       <!-- etc --> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    <Style x:Key="DelimitedBoundTb" TargetType="TextBlock" 
      BasedOn="{StaticResource StandardBoundTb}" 
    > 
     <Setter Property="Text" Value="{Binding Path=Username, StringFormat='{}{0}; '}" /> 
    </Style> 

    <DataTemplate x:Key="ColoringLabels"> 
     <TextBlock Style="{StaticResource StandardBoundTb}" /> 
    </DataTemplate> 
    <DataTemplate x:Key="ColoringLabelsDelimited"> 
     <TextBlock Style="{StaticResource DelimitedBoundTb}" /> 
    </DataTemplate> 
+0

Wunderbar, sollte ich selbst gefunden haben. Aber SO liefert ausgezeichnete Antworten so schnell, dass ich faul werde ... – Dabblernl

Verwandte Themen