2009-10-25 11 views
5

I tienen las siguientes DataTemplate:¿Cómo agregar un StringFormat a un Textblock dentro de un DataTemplate?

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

me gustaría utilizar la plantilla en un ListView donde cada nombre de usuario es seguida por una; y un espacio.

eficazmente la plantilla entonces se comportan como se escribe así:

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

¿Cómo puedo ampliar la plantilla original para obtener el resultado de la segunda?

+0

No estoy seguro que el quid de la cuestión es. ¿Se trata de la parte StringFormat, o se trata de extender una plantilla existente para obtener una nueva? Has recibido una respuesta a cualquiera de ellos :-) –

Respuesta

6

No existe un mecanismo directo para que una DataTemplate herede las propiedades de otra.

Sin embargo, puede evitar con éxito la duplicación de código mediante el uso de estilos, que tienen capacidades de herencia.

creo que esto le daría lo que necesita:

<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

Maravillosa, debería haberlo encontrado yo mismo. Pero SO brinda respuestas excelentes tan rápido que me vuelvo perezoso ... – Dabblernl

Cuestiones relacionadas