我有一些验证代码在文本框上使用屏蔽和PreviewTextInput和PreviewKeyDown事件。当我手动更改文本框中的值时,验证工作完美。当我以编程方式设置值时,直到我在框中单击并删除一个字符并重新添加它,手动触发上述一个或两个事件时,才会开始修复。
有没有办法手动触发其中任何一个事件,以便验证有效?
我尝过这样的话:
this.TextBox.RaiseEvent(this.TextBox.PreviewTextInput);
但似乎没有任何效果。我无法让这些类型匹配。欢迎任何想法。
我正在使用的基于掩码的验证代码可以在这里看到:How to define TextBox input restrictions?
答案 0 :(得分:0)
您可以使用以下代码伪造文本输入到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);
答案 1 :(得分:0)
或者您可以在通过代码输入文本后选择文本框中的文本,例如t.Select()。
通过这种方式,一旦用户将焦点从文本框移开,验证将会激活。
答案 2 :(得分:0)
要完成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);
希望这会有所帮助