带有TextBlock的WPF DataGridCell模板 - 绑定?

时间:2011-08-23 10:59:18

标签: wpf replace textblock contentpresenter datagridcell

我用ContentPresenter替换DataGridCell的{​​{1}}中的Template,现在我搜索内容的正确TextBlock

Binding的正常方式为Text="{TemplateBinding Content} - 它不起作用。 TextBlock也不正确。

还有其他想法吗?

2 个答案:

答案 0 :(得分:14)

假设您已将DataGridCell Template更改为以下

<ControlTemplate TargetType="{x:Type DataGridCell}">
    <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
        <TextBlock Text="{Binding}"/>
        <!--<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> -->
    </Border>
</ControlTemplate>

自您删除了ContentPresenter后,DataGridCell无法显示其Content。它仍然在那里。 DataGridCell.Content 是包含原始TextBlock的{​​{1}},Text中的TextBlock是另一个。

因此,您可以通过将其绑定到Template

Text属性来获得正确的Content.Text
TemplatedParent

所以,总结一下。这工作

<TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent},
                          Path=Content.Text}"/>

答案 1 :(得分:2)

数据网格单元的数据上下文应该是数据本身。所以绑定应该只是:

<TextBlock Text="{Binding}"/>