c# - 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 之前对其进行验证。也许这是不可能的,我需要不同的方法?
解决方案
如果Keyboard.FocusedElement
返回正确的控件,则将 for 设置Source
为eventArgs
thetarget
并UIElement.PreviewTextInputEvent
在TextComposition
对象中使用。.
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);
推荐阅读
- r - curl_fetch_disk 关闭且没有错误消息
- information-retrieval - 在 LSA 中形成查询向量
- c++ - 我可以通过 boost::interprocess::message_queue 发送 C++ 类对象吗?
- android - 在片段上滚动时如何隐藏工具栏
- reactjs - 开玩笑 - 如何测试反应方法的输出是否正确?
- c# - 我需要将美国英语性别特定文本从一种性别转换为另一种性别或使性别中立
- python - Authlib jwt 令牌解码在函数内部不起作用
- ios - Xcode 10:无法使用 ARMv7 存档
- azure-cognitive-search - Azure 搜索解释功能
- ruby-on-rails - 设置接受的最大内容长度