当光标位于文本框中时,如何阻止或禁用窗口快捷方式?

时间:2019-05-10 07:16:33

标签: c# wpf textbox ribbon-control

我有C#WPF应用程序和带有功能区控件和文本框的窗口。功能区为窗口定义了许多快捷键,例如 F1 D 等。当光标位于文本框中时,按 D 键会导致与该快捷方式相关联的调用功能,因此无法在文本框中写入字符"D"。有谁知道如何解决这个问题?

我尝试覆盖PreviewKeyDown事件,还找出按下键时触发了哪些事件并对其进行操作,但没有效果。

1 个答案:

答案 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

enter image description here