我可以禁用特定控件的键盘输入吗?

时间:2010-02-08 08:23:26

标签: c# wpf keyboard-events

是否可以禁用控件的键盘输入?例如ListView?我怎么做?我已经尝试重写KeyUp KeyDown事件,但显然不是这样的?

IsEnabled是一个很好的解决方案,但我只想禁用键盘交互并保持鼠标交互不变。

5 个答案:

答案 0 :(得分:13)

处理KeyDown事件为时已晚,但您可以处理PreviewKeyDown事件并且应该为您提供所需的行为:

private void MyListBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
   e.Handled = true;
}

答案 1 :(得分:4)

亲爱的maciek,您唯一需要做的就是使用OnKeyDown事件

private void txtInput_KeyDown(object sender, KeyEventArgs e)
    {
            e.Handled = true; // user can input
            e.Handled = false; // user cannot input
    }

答案 2 :(得分:3)

如果您在其中执行以下操作,KeyDown通常适用于我:

e.Handled = true;
e.SuppressKeyPress = true;

包含实际应用程序的更完整示例(禁用非数字字符的输入):http://cccontrols.codeplex.com/SourceControl/changeset/view/34146#611536

但是约翰提出了一个很好的观点。您是否有任何理由要禁用与Control的互动但未设置Enabled = false

编辑:我刚注意到了WPF标记。因为我是WPF仇恨者,所以不再确定我的答案了; - )

答案 3 :(得分:1)

WebControl.Enabled = false;的目的是阻止它响应用户输入。

编辑:现在问题已经改变,禁用控件不再是解决方案。但是我认为通过非键盘响应鼠标点击的控件是 buggy ,并非所有人都喜欢使用鼠标。

答案 4 :(得分:0)

KeyPressEventArgs.Handled:获取或设置一个值,该值指示是否已处理KeyPress事件。

财产价值 Boolean true(如果事件已处理);否则为false

如果您设置了e.Handled = true,则不再分配键盘事件。