【发布时间】:2014-12-17 09:59:55
【问题描述】:
我有以下 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>
【问题讨论】:
-
为什么不在单元格模板中放置一个实际的
TextBlock,并将其Padding设置为4? -
您的想法是渲染一个带有 ContainerViusal 的文本块,其中又包含一个 ContentPresenter:有点不寻常。此外,这个想法只有在我使用 Margin 而不是 Padding 时才有效。
标签: wpf contentpresenter