0

在我的 WPF 应用程序中,我想将用户 F5 笔划处理为刷新。为了实现这一点,我决定使用该NavigationCommands.Refresh命令。

在 UI 内部,我使用了DataGridControlExtended 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?

4

1 回答 1

0

好的,我终于偶然发现了解决方案。

https://xceed.com/forums/topic/what-is-the-function-key-F5-in-datagrid-for/

将该DataGridControl.IsRefreshCommandEnabled属性设置为False停止 datagridcontrol 为自己的内部逻辑使用 F5 键。然后按预期调用处理程序。

于 2016-11-08T07:40:11.663 回答