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

时间:2023-02-03 09:39:11
WPF中Popup上的textbox有时无法切换到中文输入法,有时可以切换成中文输入法但是
输入法候选框不跟随光标,在网上找到料有人说是微软的一个bug,下面是原文:
[原文地址] http://blog.sina.com.cn/s/blog_90231c3a0100wrob.html
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面板存在输入法切换问题,我该如何解决呢?没有多少积分,有解决方法的高手还请不吝赐教。 WPF中Popup上的textbox无法切换到中文输入法或无法实现输入候选框跟随光标

1 个解决方案

#1


测试之后发现win+space键可以切换到中文输入法,虽然不能完全解决我的问题,但至少让软件可用,暂且先这样吧,有更好方法的欢迎指出,静候大神出现 WPF中Popup上的textbox无法切换到中文输入法或无法实现输入候选框跟随光标

#1


测试之后发现win+space键可以切换到中文输入法,虽然不能完全解决我的问题,但至少让软件可用,暂且先这样吧,有更好方法的欢迎指出,静候大神出现 WPF中Popup上的textbox无法切换到中文输入法或无法实现输入候选框跟随光标