2009-10-25 28 views
5

Tôi đã sau DataTemplate:Làm thế nào để thêm một StringFormat vào một Textblock bên trong một 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> 

Tôi muốn sử dụng mẫu trong một ListView nơi mỗi tên người dùng được theo sau là một; và một không gian.

có hiệu quả các mẫu sau đó sẽ hành xử như nó được viết như thế này:

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

Làm thế nào tôi có thể mở rộng các mẫu ban đầu để có được kết quả của một thứ hai?

+0

Không chắc gì mấu chốt của câu hỏi của bạn là. Có phải về phần StringFormat hay là mở rộng một mẫu hiện có để có một mẫu mới? Bạn đã nhận được câu trả lời cho một trong hai :-) –

Trả lời

6

Không có cơ chế trực tiếp để có một DataTemplate kế thừa các thuộc tính của một dữ liệu khác.

Tuy nhiên, bạn có thể thành công tránh trùng lặp mã bằng cách sử dụng kiểu, DO có khả năng kế thừa.

Tôi tin rằng điều này sẽ cung cấp cho bạn những gì bạn cần:

<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

Tuyệt vời, nên tự mình tìm thấy câu trả lời. Nhưng SO cung cấp câu trả lời tuyệt vời quá nhanh đến nỗi tôi trở nên lười biếng ... – Dabblernl

Các vấn đề liên quan