首页 > 解决方案 > TextCompositionEvent 和 PreviewTextInput

问题描述

我通过 InputManager 以编程方式将一些文本发送到 TextBox,但在更改文本之前它不会触发 PreviewTextInput。

带有屏幕键盘的 WPF 应用程序。在某些情况下(输入货币等)文本需要在引入 TextBox 之前进行验证。

        var target = TKeyboard.FocusedElement;
        var eventArgs = new TextCompositionEventArgs(
            Keyboard.PrimaryDevice,
            new TextComposition(InputManager.Current, target, text))
        {
            RoutedEvent = UIElement.TextInputEvent
        };
        InputManager.Current.ProcessInput(eventArgs);

我需要以编程方式添加文本并能够在输入到 TextBox 之前对其进行验证。也许这是不可能的,我需要不同的方法?

标签: c#wpf

解决方案


如果Keyboard.FocusedElement返回正确的控件,则将 for 设置SourceeventArgsthetargetUIElement.PreviewTextInputEventTextComposition对象中使用。.

var target = Keyboard.FocusedElement;
var eventArgs = new TextCompositionEventArgs(
    Keyboard.PrimaryDevice,
    new TextComposition(InputManager.Current, target, text))
{
    RoutedEvent = UIElement.PreviewTextInputEvent //   <==Use another event
};
eventArgs.Source = target; //   <==Set the Source
InputManager.Current.ProcessInput(eventArgs);

推荐阅读