2013-08-08 21 views
8

Nella nostra app di Windows Store abbiamo una casella di testo e quando l'applicazione avvia questa casella di testo ottiene sempre lo stato attivo. In uno scenario desktop non c'è problema, ma su un tablet questo focus aprirà direttamente la tastiera su schermo che non è uno scenario che vogliamo.Rimuovi focus sulla prima casella di testo

Abbiamo cercato di impostare lo stato attivo su un altro controllo programmatico con il metodo .Focus (FocusState), ma in qualche modo lo stato attivo viene reimpostato sulla casella di testo. Entrambi abbiamo impostato l'attenzione nel metodo LoadState o OnNavigatedTo.

Solo quando abbiamo il timer, abbiamo impostato la messa a fuoco con successo su un altro controllo. Qualcuno ha idee su come impostare l'attenzione su un altro controllo, o preferibilmente non impostare affatto la messa a fuoco su un controllo?

risposta

16

Normalmente è possibile impostare la messa a fuoco su qualsiasi elemento tramite TextBox.Focus(). Tuttavia ho scoperto lo stesso comportamento (autofocus all'avvio) quando posizionate il vostro TextBox all'interno di un ScrollViewer o di un FlyOut. Poi si deve impostare il IsTabStop sul genitore-elemento:

<ScrollViewer IsTabStop="true"> 
    <TextBox /> 
</ScrollViewer> 
+2

Non è la risposta esatta, perché il mio testo non era all'interno di uno ScrollViewer o comparsa. Sebbene l'ho risolto aggiungendo una scrollview con IsTabStop = true prima della casella di testo e impostando la visibilità orizzontale e verticale delle barre di scorrimento per comprimere. Non è sicuramente la soluzione più bella, ma finché non ho scoperto che cosa sta causando, funziona! Grazie! – ChristiaanV

+0

IsTabStop è una proprietà Control. Quindi puoi impostarlo su qualsiasi controllo. Forse stai solo provando ad impostarlo sull'elemento genitore corrente (qualunque esso sia). –

+0

È una griglia all'interno di una pagina LayoutAware. La griglia non ha IsTabStop. LayoutAwarePage ha, ma ciò non risolve. – ChristiaanV

0

IsTabStop = "true" non ha funzionato per me. La mia soluzione è chiamare UpdateLayout() di scrollViewer prima di mettere a fuoco il TextBox:

scrollViewer.UpdateLayout();

textBox.Focus (Windows.UI.Xaml.FocusState.Programmatic);

0

Se non ti piace accettato risposta con la ScrollViewer si può anche fare questo per rimuovere la messa a fuoco:

_textBox.IsReadOnly = true; 
_textBox.IsReadOnly = false; 
Problemi correlati