DotnetBar提供的TextBox控件修改了默认的行为,当用户按Enter键的时候,会将焦点跳转到其它的控件上,而Ctrl + Enter才会是默认的行为。有时候界面的某个输入框并不需要这样的功能,比如说多行的TextBox,就需要Enter键另起一行, 并且焦点仍在TextBox上。
要解决这个问题,首先需要设置TextBox的AcceptEnter为True,不过仅仅设置这个属性还不起作用。还需要响应TextBox的KeyDown事件,当Keycode是Enter的时候,设置Handle为true, 并且设置SupressKeyDownEvent为true.
有时候这个办法还不起作用。DotNetBar有一个TextBoxItem控件,用这个方法,即使对它封装的TextBox控件响应事件,也不起作用。可以用另一个办法,在响应KeyDown事件时,开始一个Timer(或一个新的线程),把timer的时间设置得特别短,如50毫秒,在响应函数中重新将焦点设回到TextBox。