2017-06-15 66 views
-1

我有以下的DataTemplate:继承一个DataTemplate和操纵的背景颜色

<DataTemplate 
    x:Key="SourceControlCommitDataTemplate" 
    DataType="{x:Type SourceControl:SourceControlCommitViewModel}"> 
    <Border 
     BorderBrush="LightGray" 
     BorderThickness="0 0 0 1" 
     > 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="Auto" /> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto" /> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="Auto" /> 
      </Grid.ColumnDefinitions> 
      <TextBlock 
       Grid.Row="0" 
       Grid.Column="0" 
       Grid.ColumnSpan="3" 
       Padding="0 5 0 0" 
       Margin="3,0,0,0" 
       TextTrimming="CharacterEllipsis" 
       ToolTip="{Binding ToolTip}" 
       Text="{Binding Message}" 
       /> 
      <TextBlock 
       Grid.Row="1" 
       Grid.Column="0" 
       Margin="3 0 0 0" 
       Padding="0 0 0 3" 
       Foreground="Gray" 
       TextTrimming="CharacterEllipsis" 
       ToolTip="{Binding ToolTip}" 
       Text="{Binding Author}" 
       /> 
      <TextBlock 
       Grid.Row="1" 
       Grid.Column="2" 
       Margin="0 0 3 0" 
       Padding="0 0 0 3" 
       Foreground="Gray" 
       HorizontalAlignment="Right" 
       ToolTip="{Binding ToolTip}" 
       Text="{Binding Date}" 
       /> 
     </Grid> 
    </Border> 
</DataTemplate> 

我使用这个DataTemplate中为我在列表框显示的对象的列表。 我想要使用相同的数据模板,只有一个我将背景色绑定到属性的位置。所以我需要一个带有颜色的列表框和一个简单的列表框。我可以重现整个代码,也许可以使用数据模板选择器(虽然不完全确定如何使用这些),但看起来过于冗长和重复,是不是有一种简单的方法来重载整个模板中的属性或某种特定效果?

回答

0

对于不需要特殊颜色的模板,原样使用该模板。对于另一个,使用此:

<DataTemplate 
    x:Key="ColoredSourceControlCommitDataTemplate" 
    DataType="{x:Type SourceControl:SourceControlCommitViewModel}" 
    > 
    <Border 
     Background="{Binding MyProperty, Converter={StaticResource SomeConverter}}" 
     > 
     <ContentControl 
      Content="{Binding}" 
      ContentTemplate="{StaticResource SourceControlCommitDataTemplate}" 
      /> 
    </Border> 
</DataTemplate> 

或使用DataTemplate.Triggers而不是转换器。

您可能需要摆弄HorizontalAlignment="Stretch"等,但这是一般的想法。

+0

这并没有成功地改变颜色。该代码正在打破我在转换器中设置的断点,但这些更改没有反映出来。即使我硬编码的颜色(如您的原始示例)它不会做出必要的更改) –

+0

我试图包装我的原始数据模板在ContentControl中,看看是否有帮助,但没有雪茄 –

+0

尝试包装在一个边框的ContentControl和设置在边界的背景。我在我的手机在餐厅,所以很难更新我的例子 –

0

是不是有一种简单的方法来重载整个模板中的属性或某种效果?

不,一个DataTemplate总是被定义为一个整体。您不能像Style那样使用另一个模板。

但是你可以绑定到一个源属性和使用FallbackValue在当源未找到属性踢,例如:

<Border Background="{Binding Background, FallbackValue=Transparent}" 
    BorderBrush="LightGray" 
    BorderThickness="0 0 0 1"> 
...