我知道一个Windows窗体的KeyPreview属性,它允许窗体在键事件被传递给焦点控件之前接收这些事件。但是,我希望在焦点控件处理完事件后,窗体再接收到这个事件。
我在窗体上放了一个文本框来测试。在文本框中输入时,通过按特定的键命令(如Ctrl-S、F1等),它应该执行默认行为。但是,我希望这些命令能够通过文本框向上冒泡到窗体上,以便在更高层次上处理它们。这些命令是文本框默认不处理的。
然而,我确实需要事件先经过文本框。需要使用这种功能的应用程序比这个简单的示例复杂得多。例如,在文本框成为焦点控件时,它应该使用Ctrl-C和Ctrl-V执行默认的复制和粘贴。但是,在其他各种控件拥有焦点时,这些命令需要传递到最顶层的窗体级别进行处理。
编辑:看起来输入事件从窗体传递到焦点控件,而不是像我期望的那样从焦点控件传递到窗体。如果它从焦点传递到窗体,我可能不会遇到我目前的问题。
编辑2:阅读了这篇文章之后:http://www.codeproject.com/KB/WPF/BeginWPF3.aspx,我现在认为我所期望的‘冒泡’方式只在WPF中可用,而不是标准的C#。我认为我需要重新考虑用户与我的应用程序交互的方式,而不是编写大量丑陋的代码。
能够以不丑陋的方式在C#中执行WPF-style的冒泡的人将获得重要的奖励点数。
我在窗体上放了一个文本框来测试。在文本框中输入时,通过按特定的键命令(如Ctrl-S、F1等),它应该执行默认行为。但是,我希望这些命令能够通过文本框向上冒泡到窗体上,以便在更高层次上处理它们。这些命令是文本框默认不处理的。
然而,我确实需要事件先经过文本框。需要使用这种功能的应用程序比这个简单的示例复杂得多。例如,在文本框成为焦点控件时,它应该使用Ctrl-C和Ctrl-V执行默认的复制和粘贴。但是,在其他各种控件拥有焦点时,这些命令需要传递到最顶层的窗体级别进行处理。
编辑:看起来输入事件从窗体传递到焦点控件,而不是像我期望的那样从焦点控件传递到窗体。如果它从焦点传递到窗体,我可能不会遇到我目前的问题。
编辑2:阅读了这篇文章之后:http://www.codeproject.com/KB/WPF/BeginWPF3.aspx,我现在认为我所期望的‘冒泡’方式只在WPF中可用,而不是标准的C#。我认为我需要重新考虑用户与我的应用程序交互的方式,而不是编写大量丑陋的代码。
能够以不丑陋的方式在C#中执行WPF-style的冒泡的人将获得重要的奖励点数。