我有以下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>
答案 0 :(得分:3)
隐式样式应用于模板中的元素(如果元素继承自Control,而TextBlock不是继承自Control 。
欲了解更多信息,请阅读本文: MSDN Blog
更新答案
有点@JustinXL menthioned和我窥探DataGrid后,在此 范围模板不应该丢失样式,我发现本地样式确实设置为 TextBlock(由DataGrid生成)覆盖隐式样式。