快捷键问题 - 有时不起作用 - 焦点问题?

时间:2011-08-02 11:36:00

标签: wpf

我在主窗口中有一个带有“ContentControl”的WPF应用程序,它有一个树视图,菜单和数据网格。当我进行文件打开时,它们会被填充。

我花了大约一天试图让键盘绑定工作。绑定在用户控件中,但我读过(http://blogs.southworks.net/geoff/2011/03/15/wpfshortcutkeys/)你可能会遇到问题,除非你把它放在主窗口(这是一个简单的应用程序)。

所以今天我在主窗口中输入了一个测试命令。它有点好 - 当我启动应用程序但使用文件打开(或其他操作)后,快捷方式有效,它会停止。我使用过“Snoop”并且可以看到焦点没有设置为任何元素 - 当它不起作用时它是“null”但是当它起作用时它在启动时也是“null”。

当我点击快捷键时,“Snoop”在事件选项卡中不显示任何内容。如果我单击某个控件以使某些内容具有焦点,则会再次显示该事件。

就好像某些东西得到的重点不应该。

我在主窗口中有一些教科书XAML -

    <Window ... Height="400" Width="772" Focusable="False" IsTabStop="False">
    <Window.Resources>
        <DataTemplate DataType="{x:Type vm:MainWindowContentViewModel}">
            <local:MainWindowContent/>
        </DataTemplate>
    </Window.Resources>
    <Window.CommandBindings>
        <CommandBinding Command="Close" 
       CanExecute="CloseCanExecute"
       Executed="CloseExecuted" />
    </Window.CommandBindings>

    <Window.InputBindings>
        <KeyBinding Key="A"
              Modifiers="Control" 
              Command="Close" />
    </Window.InputBindings>

    <ContentControl x:Name="_contentControl"/>
</Window>

背后的代码也非常无聊(在某个地方脱离互联网!)。

private void HelpCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
  e.CanExecute = true;
  e.Handled = true;
}

private void HelpExecuted(object sender, ExecutedRoutedEventArgs e)
{
  MessageBox.Show("Hey, I'm some help.");
  e.Handled = true;
}

另一个复杂因素是我的大多数命令都使用了ICommand的东西,但是我添加了这个简单的帮助命令来尝试简化事情,因为它具有相同的焦点问题。 (我使用Keybinding a RelayCommand中的代码来绕过它!)

任何提示?

感谢。

彼得

2 个答案:

答案 0 :(得分:0)

我会在Contentcontrol上设置IsTabstop = false - 它默认为true,你无法看到它何时有焦点,因为它没有样式/ controltemplate。

看起来内容控件在程序启动时具有焦点......

此外,我会在窗口上移除Focusable = false - 这可能是焦点的原因。

答案 1 :(得分:0)

似乎无法回答问题的内联 - 也许是因为我在登录前发布了!

  

@Rune Andersen

试过 - 没有帮助。看不出任何差异。

  

手动设置Focus是否有效?

我可以在启动时手动设置一次,然后Ctrl-O第一次工作。然后在打开文件对话后它不起作用。

  

在打开文件对话框后,在Window.xaml.cs中执行this.Focus()后是否有效?

我没有尝试过,但我不想在每次失去焦点的情况下都这样做 - 我还没有确定所有这些。也许这就是我要做的事情 - 看起来有点差。

感谢。

彼得。