Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataGridTemplateColumn的编辑行为_C#_Wpf_Datagrid_Datagridtemplatecolumn_Datagridtextcolumn - Fatal编程技术网

C# DataGridTemplateColumn的编辑行为

C# DataGridTemplateColumn的编辑行为,c#,wpf,datagrid,datagridtemplatecolumn,datagridtextcolumn,C#,Wpf,Datagrid,Datagridtemplatecolumn,Datagridtextcolumn,我的DataGrid有几个DataGridTemplateColumn,如下所示: <local:DataGridSyntaxColumn MinWidth="100" x:Name="cVariantNew1" Width="250"> <DataGridTemplateColumn.CellTemplate> <DataTemplate>

我的
DataGrid
有几个
DataGridTemplateColumn
,如下所示:

 <local:DataGridSyntaxColumn MinWidth="100" x:Name="cVariantNew1" Width="250">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <local:SyntaxTextBlock HorizontalAlignment="Left" SyntaxType="VARIANT" Value="{Binding Variants[0].Name, Mode=OneWay}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>

                    <DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding Variants[0].Name, Mode=TwoWay, UpdateSourceTrigger=LostFocus}"  Style="{StaticResource GridTextBox}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellEditingTemplate>
</local:DataGridSyntaxColumn>
这工作正常,但编辑模式与通常的
DataGridTextColumn

例如:

  • DataGridTextColumn
    中,双击将光标设置为单击的位置,如果在空白处单击,则选择单元格的全部内容
  • 开始键入不进入编辑模式

有没有一种方法可以实现完全相同的行为?

您可以尝试从
DataGridTextColumn
继承,只需重写
GenerateElement
方法:

public class DataGridSyntaxColumn : DataGridTextColumn
{
    protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem)
    {
        SyntaxTextBlock textBlock = new SyntaxTextBlock()
        {
            HorizontalAlignment = HorizontalAlignment.Left,
            SyntaxType = VARIANT
        };

        BindingBase binding = Binding;
        if (binding != null)
            BindingOperations.SetBinding(textBlock, TextBlock.TextProperty, binding);
        else
            BindingOperations.ClearBinding(textBlock, TextBlock.TextProperty);

        return textBlock;
    }
}



您是否尝试从DataGridTextColumn继承并简单地重写GenerateElement方法?GenerateElement方法是什么?我需要SyntaxTextBlock来显示SyntaxHighlighting请参考我的答案。从DataGridTextColumn而不是DataGridTemplateColumn继承DataGridSyntaxColumn类。
public class DataGridSyntaxColumn : DataGridTextColumn
{
    protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem)
    {
        SyntaxTextBlock textBlock = new SyntaxTextBlock()
        {
            HorizontalAlignment = HorizontalAlignment.Left,
            SyntaxType = VARIANT
        };

        BindingBase binding = Binding;
        if (binding != null)
            BindingOperations.SetBinding(textBlock, TextBlock.TextProperty, binding);
        else
            BindingOperations.ClearBinding(textBlock, TextBlock.TextProperty);

        return textBlock;
    }
}
<local:DataGridSyntaxColumn MinWidth="100" Binding="{Binding Variants[0].Name}"  Width="250" />