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" />