ポップアップ内のコントロールではTSF以外の入力ができない?
WPFでPopupコントロールを使い、その中にTextBoxなどを配置するとTabletPC+VistaでInput Panelが出なくなります。
おかしいなぁ、と思いつつ、InputMethodオブジェクトなどいろいろ試していたのですが、どうにもなりません。
色々やってるうちに、TSFをOffにしたXPのマシン(地域と言語のオプション/言語/詳細/詳細設定/高度なテキストサービスをオフにする)でもIMEをActiveにできないことがわかりました。
なんでTSFをOffにしてるかというと、TSFが昔からbuggyでおかしな動きをするからなのですが(Natural Inputが勝手にOnになるとか、IMEが勝手に入れ替わるとか色々...)、それはともかく、メインウインドウでできることがPopupの中だけできないというのも困りますし、TSFが動いているかなんてふつうはわかりません。古めのATOKとか使っているとどうなるのか...?
以下確認用のサンプルコード。
Tablet PCの場合、Parent Textではペン入力できますが、Popup Textにはパレットが出せません。
TSFがOffだとPopup TextでIMEが使えません。
< Window x:Class="XamlPopupInputSample.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="XamlPopupInputSample" Height="300" Width="300" >
using System; using System.Windows; using System.Windows.Controls; namespace XamlPopupInputSample { ////// Interaction logic for Window1.xaml /// public partial class Window1 : System.Windows.Window { public Window1() { InitializeComponent(); cmdPopup.Click += new RoutedEventHandler(cmdPopup_Click); } void cmdPopup_Click(object sender, RoutedEventArgs e) { popper.IsOpen = true; } } }
WPFの仕様で片付けられてしまうと、非常に辛い。
Popupコントロールが使える局面がかなり狭まってしまいます。
Vistaとかx64関連でもIMEが使えないだのなんだのという話が散見されるし、世に出てしまったのはしょうがないけど、早期になんとかしてほしいところです...。
TSFももーちょいなんとかしてほしいですよ、だいたいドキュメントろくに無いし、.NET/WPFの対応もぞんざいだし...。