我正在使用TextBlock
的子类,该子类为内容字符串中的各个单词设置了不同的前景色。我不知道如何在不更换ControlTemplate的情况下做到这一点。
您应该创建一个自定义列类型并覆盖ControlTemplate
方法以返回您的自定义类型的实例,而不是创建自定义的GenerateElement
:
public class CustomColumn : DataGridTextColumn
{
protected override FrameworkElement GenerateElement(DataGridCell cell,object dataItem)
{
return new YourCustomTextBlock();
}
}
,
通常,除非确实需要对控件的功能或布局进行实质性更改(或者您自己构建),否则应避免覆盖ControlTemplate
。通常,您可以使用DataTemplate
来完成所需的操作,这样可以使基础控件保持完整,但可以自定义数据的显示方式。
对于DataGrid
,有一种特殊的列类型:DataGridTemplateColumn
。这是一个简单的用法示例:
<DataGrid>
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<!--This is used when the cell is being displayed normally-->
<DataTemplate>
<TextBlock Text="{Binding SomePropertyOfYourRow}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<!--This is used when the cell is being edited (e.g. after double-click)-->
<DataTemplate>
<TextBox Text="{Binding SomePropertyOfYourRow}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
您可以轻松地将自定义TextBlock
放到CellTemplate
中,它将用于显示该单元格的内容。
本文链接:https://www.f2er.com/2353367.html