当 ContentPresenter.ContentTemplate DataTemplate 被修改时,DataGridTemplateColumn.CellTemplate 不起作用

问题描述

我确实有以下风格:

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...