我有一些验证代码,它在一个文本框上使用了掩码以及PreviewTextInput和PreviewKeyDown事件。当我手动更改文本框中的值时,验证可以完美地工作。当我以编程方式设置这些值时,直到我在框中单击并删除一个字符并重新添加它,手动触发上面的一个或两个事件时,验证才会开始。
有没有办法手动触发这两个事件中的任何一个,这样验证才能正常工作?
我试过这样的东西:
this.TextBox.RaiseEvent(this.TextBox.PreviewTextInput);但似乎什么都不起作用。我也不能让类型匹配。欢迎任何想法。
我使用的基于掩码的验证代码可以在这里看到:How to define TextBox input restrictions?
发布于 2019-11-04 18:03:06
为了完成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);希望这能有所帮助
发布于 2012-05-31 23:18:21
您可以使用以下代码来伪造输入到TextBox的文本。
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);发布于 2013-01-14 14:02:46
或者,您可以在通过代码输入文本后选择文本框中的文本,例如t.Select()。
这样,一旦用户将焦点从文本框上移开,验证就会触发。
https://stackoverflow.com/questions/10836096
复制相似问题