WPF RadGridView - 如果输入密钥(但值未更改)就像退出密钥一样

时间:2018-02-08 16:33:36

标签: wpf telerik telerik-grid radgridview

RadGridView中编辑单元格时,转义键的正常行为是退出编辑模式,但将焦点保留在同一单元格上;如果按下回车键,则提交编辑并将焦点提前到下一个可编辑单元格。

我的老板希望我修改行为,这样如果按下了Enter但单元格的值没有改变,就好像它是转义键一样。虽然我已经能够取消提交,但焦点仍然会进入下一个可编辑的单元格,而这不是他想要的。

实现我们所寻求的目标的最佳方式是什么?在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

最简单的方法可能是处理编辑PreviewKeyDown的{​​{1}}事件,并以编程方式提交编辑并注意其他事项:

TextBox

<强> XAML:

private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        e.Handled = true;
        outerGrid.CommitEdit();
    }
}

您当然可以创建一个自定义<telerik:GridViewDataColumn> <telerik:GridViewDataColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Name}" /> </DataTemplate> </telerik:GridViewDataColumn.CellTemplate> <telerik:GridViewDataColumn.CellEditTemplate> <DataTemplate> <TextBox Text="{Binding Name}" PreviewKeyDown="TextBox_PreviewKeyDown" /> </DataTemplate> </telerik:GridViewDataColumn.CellEditTemplate> </telerik:GridViewDataColumn> 类来实现此行为:

GridViewDataColumn

<强>用法:

public class CustomColumn : GridViewDataColumn
{
    public override FrameworkElement CreateCellEditElement(GridViewCell cell, object dataItem)
    {
        TextBox textBox = base.CreateCellEditElement(cell, dataItem) as TextBox;
        textBox.PreviewKeyDown += (s, e) =>
        {
            if (e.Key == Key.Enter)
            {
                e.Handled = true;
                DataControl.CommitEdit();
            }
        };
        return textBox;
    }
}