【发布时间】: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