我有C#WPF应用程序和带有功能区控件和文本框的窗口。功能区为窗口定义了许多快捷键,例如 F1 , D 等。当光标位于文本框中时,按 D 键会导致与该快捷方式相关联的调用功能,因此无法在文本框中写入字符"D"
。有谁知道如何解决这个问题?
我尝试覆盖PreviewKeyDown
事件,还找出按下键时触发了哪些事件并对其进行操作,但没有效果。
答案 0 :(得分:0)
这是一个快速而肮脏的示例,旨在让人们了解通常如何实现快捷键。
很明显。
这非常简化,我的命令没有做很多事情。
您可以在任一文本框中键入D,没问题。
在主窗口中标记。
<Window.DataContext>
<local:MainWindowViewModel/>
</Window.DataContext>
<Window.InputBindings>
<KeyBinding Key="D"
Modifiers="Alt"
Command="{Binding MyDcommand}" />
</Window.InputBindings>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Ribbon>
<RibbonGroup>
<TextBox Text="Hello"/>
</RibbonGroup>
</Ribbon>
<TextBox Height="30"
Width="100"
Grid.Row="1"/>
</Grid>
我在视图模型中使用了mvvmlight,因此很容易定义icommand。
using GalaSoft.MvvmLight.CommandWpf;
namespace wpf_99
{
public class MainWindowViewModel : BaseViewModel
{
private RelayCommand myDcommand;
public RelayCommand MyDcommand
{
get
{
return myDcommand
?? (myDcommand = new RelayCommand(
() =>
{
Console.WriteLine("It worked OK");
}
));
}
}
当我按Alt + D时,该命令将触发文本框是否聚焦。
命令的作用域是窗口,而不仅仅是功能区。因此,如果焦点在窗口中的任何位置,它都可以工作。
我可以输入D