Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
相当于WPF中的keypreview属性_Wpf_Keyboard Events - Fatal编程技术网

相当于WPF中的keypreview属性

相当于WPF中的keypreview属性,wpf,keyboard-events,Wpf,Keyboard Events,我正在考虑为我的一些应用程序从WinForms跳入WPF,目前我正在开发组合条形码阅读器/文本输入程序(医疗保健患者表单) 为了能够处理条形码字符,我依赖WinForms中的Keypreview属性(因为无论哪个控件具有焦点,都可以扫描条形码) 但我似乎在VS2008或VS2010中都找不到WPF应用程序的KeyPreview属性 是否有其他方法/解决方案来处理WPF中的条形码字符 RGRD HenryWPF使用事件冒泡和隧道。换句话说,事件在视觉元素树上下移动。某些事件将具有相应的预览事件。因

我正在考虑为我的一些应用程序从WinForms跳入WPF,目前我正在开发组合条形码阅读器/文本输入程序(医疗保健患者表单)

为了能够处理条形码字符,我依赖WinForms中的Keypreview属性(因为无论哪个控件具有焦点,都可以扫描条形码)

但我似乎在VS2008或VS2010中都找不到WPF应用程序的KeyPreview属性

是否有其他方法/解决方案来处理WPF中的条形码字符


RGRD Henry

WPF使用事件冒泡和隧道。换句话说,事件在视觉元素树上下移动。某些事件将具有相应的预览事件。因此
MouseDown
将有一个
PreviewMouseDown
,您可以对其做出响应。签出并向下滚动到WPF输入事件部分。

在您自己的用户控件或控件中使用覆盖(这是来自UIElement的覆盖)

如果要在未创建的任何图元上预览关键点,可以执行以下操作:

 Label label = new Label();
 label.PreviewKeyDown += new KeyEventHandler(label_PreviewKeyDown);
然后有一个这样的处理程序:-

  void label_PreviewKeyDown(object sender, KeyEventArgs e) {

  }

如果您将事件标记为已处理(e.handled=true;),这将停止引发KeyDown事件。

感谢您让它工作起来!唯一的问题是我在用VB编写代码,不是用C#,但基本思想是正确的。用它创建一个标签,并将自己插入事件流

如果其他人对相同的解决方案感兴趣,但对VB for WPF感兴趣,下面是我的测试程序,它会成功地抛出所有键入的“a”字符,无论哪个控件具有焦点:

Class MainWindow

    Dim WithEvents labelFromThinAir As Label

    Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
        AddHandler MainWindow.PreviewKeyDown, AddressOf labelFromThinAir_PreviewKeyDown
    End Sub

    Private Sub labelFromThinAir_PreviewKeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)
        TextBox1.Text = e.Key    ' watch 'em coming
        If (44 = e.Key) Then e.Handled = True
    End Sub

End Class

另外,这是我第一次在stackoverflow上发表文章,这是一个非常有用的网站。也许我以后可以自己在这里回答一些问题:-)

谢谢你的链接,如果我能以某种方式赶上PreviewKeyDown活动,我会调查的。。。
Class MainWindow

    Dim WithEvents labelFromThinAir As Label

    Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
        AddHandler MainWindow.PreviewKeyDown, AddressOf labelFromThinAir_PreviewKeyDown
    End Sub

    Private Sub labelFromThinAir_PreviewKeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)
        TextBox1.Text = e.Key    ' watch 'em coming
        If (44 = e.Key) Then e.Handled = True
    End Sub

End Class