我在主窗口中有一个带有“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中的代码来绕过它!)
任何提示?
感谢。
彼得
答案 0 :(得分:0)
我会在Contentcontrol上设置IsTabstop = false - 它默认为true,你无法看到它何时有焦点,因为它没有样式/ controltemplate。
看起来内容控件在程序启动时具有焦点......
此外,我会在窗口上移除Focusable = false - 这可能是焦点的原因。
答案 1 :(得分:0)
似乎无法回答问题的内联 - 也许是因为我在登录前发布了!
@Rune Andersen
试过 - 没有帮助。看不出任何差异。
手动设置Focus是否有效?
我可以在启动时手动设置一次,然后Ctrl-O第一次工作。然后在打开文件对话后它不起作用。
在打开文件对话框后,在Window.xaml.cs中执行this.Focus()后是否有效?
我没有尝试过,但我不想在每次失去焦点的情况下都这样做 - 我还没有确定所有这些。也许这就是我要做的事情 - 看起来有点差。
感谢。
彼得。