2017-06-15 57 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"> 
...