ContentPresenter中的样式未应用

时间:2014-12-17 09:59:56

标签: wpf contentpresenter

我有以下xaml:

<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="True">
    <DataGrid.CellStyle>
        <Style TargetType="{x:Type DataGridCell}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="DataGridCell">
                        <Grid>
                            <ContentPresenter Height="50">
                                <ContentPresenter.Resources>
                                    <Style TargetType="TextBlock">
                                        <Setter Property="Padding" Value="4"/>
                                    </Style>
                                </ContentPresenter.Resources>
                            </ContentPresenter>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </DataGrid.CellStyle>
</DataGrid>

事实证明,TextBlock的默认填充为2.0 为什么风格没有应用?

编辑:我使用此解决方案(来自here)从自动生成的TextBlock(Content.Text)中获取文本并将其显示在另一个TextBlock中:

<ControlTemplate TargetType="{x:Type DataGridCell}">
    <Grid SnapsToDevicePixels="True">
        <TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, 
                                  Path=Content.Text}" Padding="4"/>
    </Grid>
</ControlTemplate>

1 个答案:

答案 0 :(得分:3)

隐式样式应用于模板中的元素(如果元素继承自Control,而TextBlock不是继承自Control

欲了解更多信息,请阅读本文: MSDN Blog

  

更新答案

     

有点@JustinXL menthioned和我窥探DataGrid后,在此   范围模板不应该丢失样式,我发现本地样式确实设置为   TextBlock(由DataGrid生成)覆盖隐式样式。