これは、Test1.Focusを呼び出した後、フォーカス関数が別の場所で呼び出されるためです。
AppShell.xaml.csでは、次のコードを見つけることができます:
は
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();
}
上記のコードは、ページに移動するとき、それはページロードイベントをサブスクライブしてページにフォーカスを設定することを意味します。
あなたのコードは、ページ自体でページがロードされたイベントを購読します。そしてあなたのコードはAppShellのPage_Loaded関数の前に実行されます。だからあなたはあなたが望むものを手に入れませんでした。
したがって、Page_Loaded機能で((Page)sender).Focus(FocusState.Programmatic);
をコメントアウトするだけです。あなたはあなたが望むものを手に入れます。私はその行の正確な目的が何であるか分かりません。しかし、すべてが良いようです。
この行をコメントアウトして何か問題が見つかった場合は、その行を処理することもできます。ロードされたイベントの後、LayoutUpdatedイベントでフォーカス関数を1回呼び出します。
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;
}
}
希望すると、これが役立ちます。
ありがとうございます。 BasicPage_LayoutUpdatedを使った作業です。 – FetFrumos