cg_programer 2016-09-01 12:41 采纳率: 0%
浏览 1582
已结题

WPF中Popup上的textbox无法切换到中文输入法或无法实现输入候选框跟随光标

WPF中Popup上的textbox有时无法切换到中文输入法,有时可以切换成中文输入法但是
输入法候选框不跟随光标,在网上找到料有人说是微软的一个bug,下面是原文:

原文地址

Wpf画面处理时,遇到个问题,popup上怎么都切换不出输入法,只有QQ输入法勉强能切出来打中文,但是也看不到输入框,原来popup上的textbox无法切换出输入法,是微软的一个bug,微软说4.0会修正该bug,项目是3.5的,最新的4.0试了下确实已经修正该问题,可惜用不到。需要自己写个自定义的popup做处理。可能是popup的弹出性质导致的,大概是popup出现时总是处于Active状态,切换输入法时又必须使输入法处于Active状态,以致无法换成切换。代码前半段连语法不会,转不成vb.net,直接c#编译成dll供日后使用算了。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Controls.Primitives;
using System.Windows.Interop;
using System.Windows.Input;
using System.Windows;
namespace HDTWpfControls.vb
{
public class HdtPopup : Popup
{
[DllImport("user32.dll")]
static extern IntPtr SetActiveWindow(IntPtr hWnd);
static HdtPopup()
{
EventManager.RegisterClassHandler(typeof(HdtPopup), Popup.PreviewGotKeyboardFocusEvent, new KeyboardFocusChangedEventHandler(OnPreviewGotKeyboardFocus),true);
}
private static void OnPreviewGotKeyboardFocus(Object sender, KeyboardFocusChangedEventArgs e)
{
var textBox = e.NewFocus as TextBoxBase;
if (textBox != null)
{
var hwndSource = PresentationSource.FromVisual(textBox) as HwndSource;
if (hwndSource != null)
{
SetActiveWindow(hwndSource.Handle);
}
}
}
}
}
参考资料 http://connect.microsoft.com/VisualStudio/feedback/details/389998/wpf-popup-messes-with-ime-switching


没有测试过此方法的可行性,但是这种方法不能解决一此内置popup控件的bug,比如我用了一个第三方表格控件,里面弹出的popup面板存在输入法切换问题,我该如何解决呢?没有多少c币,有解决方法的还请不吝赐教。

  • 写回答

1条回答 默认 最新

  • qq_34076904 2016-09-01 13:33
    关注

    吗呀吧吗吧见缘毋所有母u反对

    评论

报告相同问题?

悬赏问题

  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计