2013-06-03 90 views
4

我正在開發一個應該在Windows 8平板電腦上運行的WPF應用程序。 當談到文本框時,我很難找到正確的方式讓用戶在這些文本框中輸入文本。在Win 8平板電腦上的WPF應用程序中的屏幕鍵盤

我試過使用osk.exe和tabtip.exe,但都缺乏大小,位置等支持。此外,您必須重寫文本框上的相當多的事件,以照顧打開和關閉鍵盤(當用戶離開文本框時)等等。所有這些都可以避免常見的問題,例如,鍵盤滑入文本框的頂部,因此無法看到您正在輸入的內容。

我在這裏錯過的是更多的Windows 8在屏幕鍵盤支持,所以我可以打開一個鍵盤有不同的選項可供選擇。

所以我的問題是,有沒有一種處理用戶在Windows 8平板電腦上輸入文字的標準方式?或者,微軟只是「讓你在黑暗中」?每個人都做什麼? 以現在的方式創建som非常糟糕且不受歡迎的WPF解決方案非常簡單。

謝謝。

+0

不是一個直接的答案,但仍可能是有益的 - [如何打開使用C++屏幕上的鍵盤在Windows 7平板電腦設備(http://stackoverflow.com/questions/4939041/how-to在屏幕上使用c-in-windows-7-tablet-devices) – Sevenate

回答

2

我剛剛完成開發觸摸屏Kiosk,沒有物理鍵盤。我也發現了osk限制。

在圖形設計師的幫助下,我們創建了我們自己的鍵盤,帶有背景鍵的按鈕,以及與按鈕意圖匹配的內容(或標籤)。將大多數按鈕分配給公共事件處理程序,該處理程序將文本插入所選控件的CaretIndex中。

對DEL和ENTER使用單獨的處理程序。

對於我的應用程序,我彈出一個帶有文本框,所需鍵盤(字母,數字,兩個等)的新窗口,一個有用的句子提示用戶輸入和顯示所需格式的佔位符。

它運行得非常好,讓我們完全控制用戶體驗。

private void key_Click(object sender, RoutedEventArgs e) 
{ 
    _activeControl.SelectedText = (string)((Control)sender).Tag; 
    _activeControl.CaretIndex += _activeControl.SelectedText.Length; 
    _activeControl.SelectionLength = 0; 
    _activeControl.Focus(); 
} 
private void btnDEL_Click(object sender, RoutedEventArgs e) 
{ 
    var ci = _activeControl.CaretIndex; 
    if (ci > 1) 
    { 
     _activeControl.Text = _activeControl.Text.Remove(
            _activeControl.CaretIndex - 1, 1); 
     _activeControl.SelectionStart = ci - 1; 
    } 
    else if (_activeControl.Text.Length > 0) 
    { 
     _activeControl.Text = _activeControl.Text.Remove(0, 1); 
    } 
    _activeControl.Focus(); 
} 
private void btnEnter_Click(object sender, RoutedEventArgs e) 
{ 
    // Raise an event here, signalling your application 
    // to validate and move to the next field 
} 
+0

謝謝你的貢獻。 我沒有選擇自己開發鍵盤,但接受了osk.exe的限制。 雖然你的解決方案看起來不錯! – Farsen

+0

如果你認爲我已經贏得了一個,那麼upvote會很好。 – B2K

相關問題