wpf - 当用户在 RadGridView 中按 Enter 时,防止跳转到下一行
问题描述
我有一个RadGridView
来自 Telerik UI for WPF 的可编辑列。当用户编辑该列中的单元格并点击Enter时,网格中下一行中的同一单元格将获得焦点。
我希望用户刚刚编辑的单元格失去焦点。如何做到这种 MVVM 风格?
解决方案
您可以通过编写自定义键盘命令提供程序来更改此行为。此提供程序会覆盖默认的Enter
按下操作。SelectedItem
它通过将 设置为来提交编辑并取消选择单元格null
。
public class CustomKeyboardCommandProvider : DefaultKeyboardCommandProvider
{
private readonly GridViewDataControl _grid;
public CustomKeyboardCommandProvider(GridViewDataControl grid)
: base(grid)
{
_grid = grid;
}
public override IEnumerable<ICommand> ProvideCommandsForKey(Key key)
{
var commands = base.ProvideCommandsForKey(key).ToList();
if (key != Key.Enter)
return commands;
commands.Clear();
commands.Add(RadGridViewCommands.CommitEdit);
_grid.SelectedItem = null;
return commands;
}
}
您必须分配新的提供者。最简单的方法是在代码隐藏中,因为它有一个构造函数参数。
MyRadDataGridView.KeyboardCommandProvider = new CustomKeyboardCommandProvider(TestGridView);
或者,创建一个TriggerAction<RadGridView>
并将其附加到Loaded
网格视图的事件。
public class SetCustomKeyboardCommandProviderAction : TriggerAction<RadGridView>
{
protected override void Invoke(object parameter)
{
AssociatedObject.KeyboardCommandProvider = new CustomKeyboardCommandProvider(AssociatedObject);
}
}
<telerik:RadGridView>
<b:Interaction.Triggers>
<b:EventTrigger EventName="Loaded">
<local:SetCustomKeyboardCommandProviderAction/>
</b:EventTrigger>
</b:Interaction.Triggers>
<!-- ...other definitions. -->
</telerik:RadGridView>
推荐阅读
- java - Caesar Cipher 在空格后不读取单词,无法弄清楚原因
- mysql - 我想从 MySQL 表中删除重复的行
- azure-data-lake - 如何使用 Azure API 管理从 Azure Data Lake Rest API 获取响应?
- python-3.6 - 重复字符计数器
- python - Python - 通过 shell 脚本激活 conda env
- linear-regression - 线性回归成本函数和梯度下降
- bcrypt - 特定的 saltRound 会生成唯一的盐吗?
- python - 关于类或多行动画的 Python 代码?
- angular - 角度 2 中的条件 distinctUntilChanged
- r - R Shiny - 在modalDialog中预选数据表的行和页