问题描述
我确实有以下风格:
<Style x:Key="DefaultDataGridCell" targettype="DataGridCell">
<Setter Property="FontSize" Value="13"/>
<Setter Property="Margin" Value="0" />
<Setter Property="Foreground" Value="Black"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate targettype="{x:Type DataGridCell}">
<Border x:Name="CellBorder" Padding="1.5,0" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" SnapsToDevicePixels="True">
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
<!--Here my problems of understanding are starting-->
<ContentPresenter.ContentTemplate>
<DataTemplate >
<TextBlock Text="{Binding Text}"
Padding="2,0"
Background="{Binding Background}"
ToolTip="{Binding ToolTip}"
/>
</DataTemplate>
</ContentPresenter.ContentTemplate>
</ContentPresenter>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
使用上述样式,此 XAML 无法如我所愿:
<DataGridTemplateColumn Header="Eskalation" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDeFinitions>
<ColumnDeFinition Width="15"/>
</Grid.ColumnDeFinitions>
<TextBlock Grid.Column="0" >
<TextBlock.Background>
<MultiBinding ConverterParameter="EskaStufe1" Converter="{StaticResource EskalationsBackgroundConverter}">
<Binding Path="Status"/>
<Binding Path="Prioritat"/>
<Binding Path="ErfasstAm"/>
</MultiBinding>
</TextBlock.Background>
</TextBlock>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
被忽略。我希望这个 XAML 能够获得更高的优先级。
如果我删除 <ContentPresenter.ContentTemplate>
标签,一切正常。这将按我的预期工作。
<Style x:Key="DefaultDataGridCell" targettype="DataGridCell">
<Setter Property="FontSize" Value="13"/>
<Setter Property="Margin" Value="0" />
<Setter Property="Foreground" Value="Black"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate targettype="{x:Type DataGridCell}">
<Border x:Name="CellBorder" Padding="1.5,0" Background="{TemplateBinding Background}"
BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}"
SnapsToDevicePixels="True">
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
所以我需要帮助来了解我应该如何更改 XAML 以使其正常工作。
非常感谢!
解决方法
经过几个小时的睡眠,我想出了解决方案。悄悄起身,立马撑起身子。
太简单了。定义了一个新样式并将其应用于受影响的列。
<Style x:Key="EskalationsDataGridCellStyle" TargetType="DataGridCell"
BasedOn="{StaticResource DefaultDataGridCell}">
<Setter Property="Margin" Value="2,0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border x:Name="CellBorder" Padding="1.5,0" Background="{TemplateBinding Background}"
BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" SnapsToDevicePixels="True">
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
以及使用:
<DataGridTemplateColumn Header="Eskalation" CellStyle="{StaticResource EskalationsDataGridCellStyle}" >