在我的 WPF 应用程序中,我想将用户 F5 笔划处理为刷新。为了实现这一点,我决定使用该NavigationCommands.Refresh
命令。
在 UI 内部,我使用了DataGridControl
Extended WPF Toolkit。问题:只要焦点在数据网格内,刷新命令处理程序就不会被触发。
这可以用一个非常小的样本来证明:
<Window x:Class="WpfTests.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:xd="http://schemas.xceed.com/wpf/xaml/datagrid">
<Window.CommandBindings>
<CommandBinding Command="NavigationCommands.Refresh" Executed="CommandBinding_Executed" CanExecute="CommandBinding_CanExecute"/>
</Window.CommandBindings>
<StackPanel>
<TextBox Text="Click me to get the focus out of DataGridControl"/>
<xd:DataGridControl/>
</StackPanel>
</Window>
后面的代码没什么好看的,我只是用它在处理程序中放置断点:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
{
e.Handled = true;
}
private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
e.Handled = true;
}
}
复制:
- 启动应用程序,按 F5 - 执行处理程序
- 单击该
DataGridControl
区域,按 F5 - 不执行处理程序 - 单击文本框,按 F5 - 执行处理程序
所以问题是,当焦点在DataGridControl
?