我有以下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,只有一个我将背景颜色绑定到属性。所以我需要一个带颜色的列表框和一个简单的列表框。我可以重现整个代码并且可能使用datatemplate选择器(虽然不完全确定如何使用它们),但这看起来过于冗长和重复,是不是有一种简单的方法来重载整个模板中的属性或者那种效果呢? / p>
答案 0 :(得分: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"
等等,但这是一般的想法。
答案 1 :(得分:0)
是否有一种简单的方法可以在整个模板中重载某个属性,或者为此产生什么?
不,DataTemplate
始终定义为整体。您不能像使用Style
那样将模板基于另一个模板。
但是您可以绑定到source属性并使用在找不到source属性时启动的FallbackValue
,例如:
<Border Background="{Binding Background, FallbackValue=Transparent}"
BorderBrush="LightGray"
BorderThickness="0 0 0 1">
...