WPF 文本框引发事件
本文关键字:事件 文本 WPF | 更新日期: 2023-09-27 18:35:49
我有一些验证代码,它使用掩码和文本框上的 PreviewTextInput 和 PreviewKeyDown 事件。 当我手动更改文本框中的值时,验证效果很好。 当我以编程方式设置值时,valdation 不会开始,直到我单击框并删除一个字符并重新添加它,手动触发上述一个或两个事件。
有没有办法手动触发这些事件中的任何一个,以便验证有效?
我尝试过这样的东西:
this.TextBox.RaiseEvent(this.TextBox.PreviewTextInput);
但似乎没有任何效果。我也无法获得匹配的类型。 欢迎任何想法。
我正在使用的基于掩码的验证代码可以在这里看到:如何定义 TextBox 输入限制?
为了完成Trevor Elliott的回答,我必须重复使用相同的TextCompositionEventArgs
引用才能使其工作:
TextCompositionEventArgs eventArgs =
new TextCompositionEventArgs(
InputManager
.Current
.PrimaryKeyboardDevice,
new TextComposition(
InputManager.Current,
target,
((char) KeyInterop.VirtualKeyFromKey(KBB.Key)).ToString()));
eventArgs.RoutedEvent = TextCompositionManager.PreviewTextInputStartEvent;
target.RaiseEvent(eventArgs);
eventArgs.RoutedEvent = TextCompositionManager.TextInputStartEvent;
target.RaiseEvent(eventArgs);
eventArgs.RoutedEvent = TextCompositionManager.PreviewTextInputEvent;
target.RaiseEvent(eventArgs);
eventArgs.RoutedEvent = TextCompositionManager.TextInputEvent;
target.RaiseEvent(eventArgs);
希望这有帮助
可以使用以下代码伪造文本框的文本输入。
TextCompositionEventArgs args = new TextCompositionEventArgs(
InputManager.Current.PrimaryKeyboardDevice,
new TextComposition(InputManager.Current, txtBox, "Test text")
);
args.RoutedEvent = TextCompositionManager.PreviewTextInputEvent;
txtBox.RaiseEvent(args);
args = new TextCompositionEventArgs(
InputManager.Current.PrimaryKeyboardDevice,
new TextComposition(InputManager.Current, txtBox, "Test text")
);
args.RoutedEvent = TextCompositionManager.TextInputEvent;
txtBox.RaiseEvent(args);
或者
,您可以在通过代码(例如t.Select()输入文本后在文本框中选择文本。
这样,一旦用户将焦点移出文本框,就会触发验证。