【问题标题】:WPF RadGridView - If Enter Key (But Value Not Changed) Act Like Escape KeyWPF RadGridView - 如果输入键(但值未更改)就像转义键一样
【发布时间】:2018-07-19 07:29:01
【问题描述】:

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

我的老板希望我修改行为,以便在按下回车但单元格的值没有改变时,将其视为转义键。虽然我已经能够取消提交,但焦点仍然前进到下一个可编辑单元格,这不是他想要的。

实现我们的目标的最佳方式是什么?提前感谢您的帮助。

【问题讨论】:

    标签: wpf telerik telerik-grid radgridview


    【解决方案1】:

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

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

    XAML:

    <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;
        }
    }
    

    用法:

    <telerik:RadGridView.Columns>
        <local:CustomColumn DataMemberBinding="{Binding Name}" Header="Name" />
    </telerik:RadGridView.Columns>
    

    【讨论】:

    • 提交不需要的编辑似乎非常违反直觉,但这就是诀窍。非常感谢。
    猜你喜欢
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 2014-07-02
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多