WPF 文本框引发事件

本文关键字:事件 文本 WPF | 更新日期: 2023-09-27 18:35:49

我有一些验证代码,它使用掩码和文本框上的 PreviewTextInput 和 PreviewKeyDown 事件。 当我手动更改文本框中的值时,验证效果很好。 当我以编程方式设置值时,valdation 不会开始,直到我单击框并删除一个字符并重新添加它,手动触发上述一个或两个事件。

有没有办法手动触发这些事件中的任何一个,以便验证有效?

我尝试过这样的东西:

this.TextBox.RaiseEvent(this.TextBox.PreviewTextInput);

但似乎没有任何效果。我也无法获得匹配的类型。 欢迎任何想法。

我正在使用的基于掩码的验证代码可以在这里看到:如何定义 TextBox 输入限制?

WPF 文本框引发事件

为了完成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()输入文本后在文本框中选择文本。

这样,一旦用户将焦点移出文本框,就会触发验证。