È perché la funzione di messa a fuoco viene chiamata in un'altra posizione dopo aver chiamato il Test1.Focus.
In AppShell.xaml.cs, è possibile trovare il seguente codice:
private void OnNavigatedToPage(object sender, NavigationEventArgs e)
{
// After a successful navigation set keyboard focus to the loaded page
if (e.Content is Page && e.Content != null)
{
var control = (Page)e.Content;
control.Loaded += Page_Loaded;
}
}
private void Page_Loaded(object sender, RoutedEventArgs e)
{
((Page)sender).Focus(FocusState.Programmatic);
((Page)sender).Loaded -= Page_Loaded;
this.CheckTogglePaneButtonSizeChanged();
}
Il codice di cui sopra significa che quando si accede a una pagina, sottoscriverà la pagina caricata evento e impostare la messa a fuoco a pagina.
Il tuo codice sottoscrive l'evento caricato nella pagina stessa. E il tuo codice verrà eseguito prima della funzione Page_Loaded in AppShell. Quindi non hai ottenuto quello che vuoi.
Quindi se si commenta semplicemente ((Page)sender).Focus(FocusState.Programmatic);
nella funzione Page_Loaded. Otterrai quello che vuoi. Non sono sicuro di quale sia lo scopo esatto di quella linea. Ma tutto sembra buono.
Se trovi qualcosa di sbagliato dopo aver commentato quella riga, possiamo anche lavorarci sopra. Chiama la funzione di messa a fuoco una volta nell'evento LayoutUpdated dopo l'evento caricato.
public sealed partial class BasicPage : Page
{
bool bAfterLoaded = false;
public BasicPage()
{
this.InitializeComponent();
this.Loaded += BasicPage_Loaded;
this.LayoutUpdated += BasicPage_LayoutUpdated;
}
private void BasicPage_LayoutUpdated(object sender, object e)
{
if (bAfterLoaded)
{
Test1.Focus(FocusState.Programmatic);
bAfterLoaded = !bAfterLoaded;
}
}
private void BasicPage_Loaded(object sender, RoutedEventArgs e)
{
bAfterLoaded = !bAfterLoaded;
}
}
Spero che questo possa aiutarti.
fonte
2015-11-10 19:10:05
Grazie. Funziona con BasicPage_LayoutUpdated. – FetFrumos