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币,有解决方法的还请不吝赐教。