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

fra*_*unk 4 wpf replace textblock contentpresenter datagridcell

我更换ContentPresenterDataGridCellTemplateTextBlock的,现在我搜索正确Binding的内容.

正常的方法是Text="{TemplateBinding Content}TextBlock-这是行不通的.也Text="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Content, Mode=TwoWay}"行不通.

还有其他想法吗?

Fre*_*lad 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>
Run Code Online (Sandbox Code Playgroud)

由于你删除了ContentPresenter,DataGridCell无法显示它Content.它仍然在那里.这DataGridCell.Content 是一个TextBlock包含你的原始TextTextBlockTemplate另一个.

因此,Text通过将其绑定到Content.Text属性,您将获得正确的TemplatedParent

<TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent},
                          Path=Content.Text}"/>
Run Code Online (Sandbox Code Playgroud)

所以,总结一下.这有效

<ControlTemplate TargetType="{x:Type DataGridCell}">
    <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
        <TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, 
                                  Path=Content.Text}"/>
    </Border>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)