在帶鍵盤鼠標的電腦上編寫應用於觸屏電腦的項目,為了能輸入中文、英文、數字等各種庸人自擾。
一、自己畫了個鍵盤
為了實現能輸入中文,還簡單編寫了個拼音輸入法,各種折騰,始終不是很舒服。最后客戶要求手寫輸入中文,於是就完全放棄了。
二、折騰TabTip.exe
win10的虛擬鍵盤是一個程序,即c:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe,文本框獲得焦點后,運行如下代碼
var file = "C:\\Program Files\\Common Files\\microsoft shared\\ink\\TabTip.exe";
if (!System.IO.File.Exists(file))
return;
Process.Start(file);
有時候會失效,后來發現要先殺進程,於是
foreach (var process in Process.GetProcessesByName("TabTip"))
process.Kill();
var file = "C:\\Program Files\\Common Files\\microsoft shared\\ink\\TabTip.exe";
if (!System.IO.File.Exists(file))
return;
Process.Start(file);
似乎可以了,接着就像能不能彈出數字鍵盤、只輸入英文等,又是各種百度、查看注冊表等等,居然查到一篇文章WPF 禁用TextBox的觸摸后自動彈出虛擬鍵盤,觸摸是關鍵,暈。
於是以為要平板模式的時候能自動彈出虛擬鍵盤,后來發現無鍵盤和鼠標的win10里面居然還有個“不處於平板電腦模式且未連接鍵盤時顯示觸摸鍵盤”的開關,於是一切都變得簡單了。
三、直接控制TextBox
<TextBox Name="tb1" FontSize="50" HorizontalContentAlignment="Center" InputMethod.IsInputMethodEnabled="True" InputMethod.InputScope="Digits"/>
<TextBox Name="tb2" FontSize="40" InputMethod.IsInputMethodEnabled="True" InputMethod.InputScope="PersonalFullName"/>
tb1獲得焦點的時候(觸摸或者tb1.Focus())自動顯示虛擬鍵盤的數字界面
tb2獲得焦點的時候自動顯示全鍵盤
一定要觸摸,鼠標單擊按鈕然后執行tb1.Focus()失效
