我有一个TextBox
只允许输入某些字符的;我在PreviewTextInput
事件中处理这个逻辑。如果是允许的字符,则TextChanged
触发该事件,否则取消该TextChanged
事件。
我有另一个应用程序在运行时在第二个屏幕上打开,但是即使在另一个应用程序处于活动状态时有键盘输入,它仍然应该更新当前关注TextBox
的主应用程序。为此,我OnKeyPress()
为第二个应用程序上的事件添加了一个侦听器,它调用主应用程序中PreviewTextInput
的焦点事件。TextBox
这是代码:
private void ImageEventController_OnKeyPress(char c)
{
object focusedElement = this.CurrentKeyboardFocus;
if (focusedElement != null)
{
if (focusedElement is TextBox)
{
TextBox target = (TextBox)focusedElement;
if (target.IsEnabled)
{
string text = c.ToString();
var routedEvent = TextCompositionManager.PreviewTextInputEvent;
target.RaiseEvent(new TextCompositionEventArgs(
InputManager.Current.PrimaryKeyboardDevice,
new TextComposition(InputManager.Current, target, text)) { RoutedEvent = routedEvent });
}
}
}
}
当它被调用时,它会通过PreviewTextInput
事件,但是TextChanged
即使它是一个有效的字符,它也永远不会被触发。以编程方式调用时是否有任何理由TextChanged
不被解雇?PreviewTextInput
更新:
我将此代码添加到PreviewTextInput
事件侦听器的底部:
if (!e.Handled)
{
textbox.Text = e.Text;
}
当第二个应用程序有焦点时,这会强制TextChanged
事件触发并修复功能,但是如果主应用程序有焦点,它会导致两个文本框在仅按下一个按钮时得到更新。