WPF RadGridView - 如果输入键(但值未更改)就像转义键
WPF RadGridView - If Enter Key (But Value Not Changed) Act Like Escape Key
编辑 RadGridView
中的单元格时,转义键的正常行为是退出编辑模式但保持焦点在同一单元格上;如果按下回车键,则提交编辑并将焦点移至下一个可编辑单元格。
我的老板想让我修改行为,以便在按下回车键但单元格的值没有改变时,将其当作转义键。虽然我已经能够取消提交,但是焦点仍然前进到下一个可编辑的单元格,这不是他想要的。
实现我们所寻求目标的最佳方式是什么?在此先感谢您的帮助。
最简单的方法可能是处理编辑 TextBox
的 PreviewKeyDown
事件并以编程方式提交编辑并注意其他事项:
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
class 来实现此行为:
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>
编辑 RadGridView
中的单元格时,转义键的正常行为是退出编辑模式但保持焦点在同一单元格上;如果按下回车键,则提交编辑并将焦点移至下一个可编辑单元格。
我的老板想让我修改行为,以便在按下回车键但单元格的值没有改变时,将其当作转义键。虽然我已经能够取消提交,但是焦点仍然前进到下一个可编辑的单元格,这不是他想要的。
实现我们所寻求目标的最佳方式是什么?在此先感谢您的帮助。
最简单的方法可能是处理编辑 TextBox
的 PreviewKeyDown
事件并以编程方式提交编辑并注意其他事项:
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
class 来实现此行为:
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>