当用户按下Alt + X时,如何在DataGridTextColumn中的插入位置插入文本?
这是DataGrid
<DataGrid x:Name="TheGrid" SelectionUnit="Cell" ItemsSource="{Binding Soruce}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataGrid.Columns>
</DataGrid>
我尝试过制作自己的CellEditingTemplate和CellTemplate。但是,当我这样做时,它会弄乱网格的Tab功能。我必须使用double或tripple-tab来编辑下一个单元格。
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" KeyDown="TextBox_KeyDown"></TextBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Value}"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
代码背后。您不能直接将文本插入数据绑定模型,因为您必须知道插入位置。
private void TextBox_KeyDown(object sender, KeyEventArgs e)
{
//Insert text at caret position
}
答案 0 :(得分:1)
添加一个样式,在ClipEown事件的EditingElementStyle上添加EventSetter。
<DataGrid x:Name="TheGrid" SelectionUnit="Cell" ItemsSource="{Binding Soruce}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<DataGridTextColumn.EditingElementStyle>
<Style TargetType="{x:Type TextBox}">
<EventSetter Event="KeyDown" Handler="TextBox_KeyDown" />
</Style>
</DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
然后将事件处理程序添加到后面的代码中。在SelectedText属性上插入文本以获得熟悉的行为,然后将carret移动到插入的文本之后。
private void TextBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.SystemKey == Key.X && Keyboard.Modifiers.HasFlag(ModifierKeys.Alt))
{
string text = "Text to insert";
TextBox textBox = sender as TextBox;
textBox.SelectedText = text;
textBox.SelectionStart = textBox.SelectionStart + text.Length;
textBox.SelectionLength = 0;
}
}