设置WPF DataGridCell ControlTemplate后无法编辑

我正在自定义WPF datagridcell样式,但是一旦完成此操作,双击编辑将不再起作用。我也尝试过手动调用myDataGrid.BeginEdit,但似乎没有任何反应。这是类似于我的代码:

<Style x:Key="MyCell" TargetType="{x:Type datagridcell}" BasedOn="{StaticResource {x:Type datagridcell}}">
    <Setter Property="Template">
         <Setter.Value>
             <ControlTemplate>
                 <Border>
                     <TextBlock />
                 </Border>
             </ControlTemplate>
         </Setter.Value>
    </Setter>
</Style>

我认为问题是因为我要覆盖ControlTemplate,所以不再存在编辑器?如果是这样,我可以使用这种方法对它们进行排序以使用默认编辑器吗?

qf201319 回答:设置WPF DataGridCell ControlTemplate后无法编辑

我正在使用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

大家都在问