Если вы хотите просто добавить TextWrapping ко всем TextBox в вашей DataGrid, я бы предложил создать для них неявный стиль в DataGrid.Resources
<DataGrid.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="TextWrapping" Value="Wrap" />
</Style>
</DataGrid.Resources>
Причина, по которой данные не отображаются в вашем шаблоне, заключается в том, что вы пропускаете ContentPresenter
. Это объект, который отображает отображаемое содержимое фактического DataGridCell
. Сам по себе DataGridCell
понятия не имеет, что такое содержимое его ячейки, поэтому не знает, что такое привязка.
Например, это работает
<Style TargetType="DataGridCell">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<TextBlock TextWrapping="Wrap">
<ContentPresenter Content="{TemplateBinding Content}" />
</TextBlock>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Но не это
<Style TargetType="DataGridCell">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<TextBox TextWrapping="Wrap" Text="{TemplateBinding Content}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
, поскольку Content
- это любой объект, находящийся в ячейке в данный момент, будь то TextBox
, TextBlock
, ComboBox
и т. Д.