fra*_*unk 4 wpf replace textblock contentpresenter datagridcell
我更换ContentPresenter的DataGridCell的Template用TextBlock的,现在我搜索正确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包含你的原始Text和TextBlock在Template另一个.
因此,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)