【问题标题】:Shortcut key problems - sometimes don't work - focus problem?快捷键问题 - 有时不起作用 - 焦点问题?
【发布时间】:2011-08-02 11:36:00
【问题描述】:

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

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

所以今天我在主窗口中放了一个测试命令。好一点 - 当我启动应用程序时快捷方式有效,但在使用 File-Open(或其他操作)后,它会停止。我使用了“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 的代码来解决这个问题!)

有什么提示吗?

谢谢。

彼得

【问题讨论】:

  • 手动设置焦点有用吗?
  • @Peter Smithson,在您打开文件对话框后,在 Window.xaml.cs 中执行 this.Focus() 后是否有效?

标签: wpf


【解决方案1】:

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

当您的程序启动时,内容控件似乎具有焦点...

我还会删除窗口上的 Focusable=false - 这可能是导致焦点模糊的原因。

【讨论】:

    【解决方案2】:

    似乎无法在线回复问题 - 可能是因为我在登录之前发布了!

    @Rune Andersen

    试过了 - 没有帮助。看不出有什么区别。

    手动设置焦点有用吗?

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

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

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

    谢谢。

    彼得。

    【讨论】:

    • 你终于找到解决这个问题的办法了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 2022-12-18
    相关资源
    最近更新 更多