Sto sviluppando la mia app per Windows 8 in C# e una cosa molto fastidiosa è che la tastiera tattile a volte rimane sullo schermo anche se tutte le caselle di testo hanno perso la concentrazione.Windows 8 - Come smettere di toccare la tastiera?
Ho letto l'articolo keyboard dismissal logic white paper, che spiega che quando si passa da controllo a controllo, la tastiera può rimanere accesa anche se un controllo potrebbe non accettare l'input da tastiera. Questo sarebbe il mio caso perché tutti i miei contenuti sono ospitati in un GridView o in un ListView. Quando l'utente fa clic su qualsiasi elemento sullo schermo, il tocco si fermerà su questi controlli. Questo è molto fastidioso perché la tastiera occupa metà schermo e non c'è modo di chiudere la tastiera.
Ho provato a impostare la casella di testo per disabilitare e non ha avuto alcun effetto. L'unico modo per rimuovere la tastiera è di mettere a fuoco un pulsante, che è estremamente hacky.
Pensavo di aver bisogno di fare qualcosa con "AutomationPeer", ma non sono chiaro cosa esattamente fare. C'è un modo per ignorare questo comportamento?
Modifica: L'ho capito. L'obiettivo è di passare al tipo di controllo delle voci GridView e GridView non elencate nello whitepaper. Ecco il codice della griglia che ho fatto che mi ha permesso di nascondere la tastiera:
public class KeyboardUnfocusableGridView : GridView
{
private class KeyboardUnfocusableGridViewAutomationPeer : GridViewAutomationPeer
{
public KeyboardUnfocusableGridViewAutomationPeer(GridView owner)
: base(owner)
{
}
protected override AutomationControlType GetAutomationControlTypeCore()
{
return AutomationControlType.Custom;
}
}
private class KeyboardUnfocusableGridViewItemAutomationPeer : GridViewItemAutomationPeer
{
public KeyboardUnfocusableGridViewItemAutomationPeer(GridViewItem owner)
: base(owner)
{ }
protected override AutomationControlType GetAutomationControlTypeCore()
{
return AutomationControlType.Custom;
}
}
private class KeyboardUnfocusableGridViewItem : GridViewItem
{
protected override AutomationPeer OnCreateAutomationPeer()
{
var baseItem = base.OnCreateAutomationPeer();
return new KeyboardUnfocusableGridViewItemAutomationPeer(this);
}
}
protected override AutomationPeer OnCreateAutomationPeer()
{
var baseItem = base.OnCreateAutomationPeer();
return new KeyboardUnfocusableGridViewAutomationPeer(this);
}
protected override Windows.UI.Xaml.DependencyObject GetContainerForItemOverride()
{
return new KeyboardUnfocusableGridViewItem();
}
}
E 'un peccato che ho bisogno di scrivere questo molto codice per fare una cosa semplice. Questo non è assolutamente ottimale dal momento che avrei bisogno di fare questo per ciascuno dei ItemsControl
che ho bisogno di usare.
Se tutti i contenuti sono in una GridView o ListView, tutto quello che dovete fare è impostare la proprietà IsHitTestVisible su false e le caselle di testo non saranno in grado di accettare lo stato attivo, quindi la tastiera non verrà visualizzata. Sfortunatamente, perderai anche lo scrolling. Solo una FYI ... –
Ottima soluzione, ero senza speranza con questo problema :). E la stessa tecnica funziona anche per ListView. –
Puoi per favore spostare la tua soluzione a una risposta qui sotto in modo che possiamo ottenere questo dalla lista senza risposta? Grazie. –