如何防止TextBlock获得自动焦点

Dan*_*ife 5 c# xaml win-universal-app windows-10-mobile windows-10-universal

我有以下XAML摘录:

      <SplitView Name="Menu" DisplayMode="CompactOverlay" OpenPaneLength="200" CompactPaneLength="0" Grid.RowSpan="2">
            <SplitView.Pane>
                <StackPanel>
                    <AutoSuggestBox Margin="0,20,0,20" Width="170" PlaceholderText="Search" QueryIcon="Find"></AutoSuggestBox>
                    <ListBox>
                        <ListBoxItem Tapped="Projects_Tapped">
                            <StackPanel Orientation="Horizontal">
                                <SymbolIcon Symbol="Library" />
                                <TextBlock Margin="10,0,0,0">Projects</TextBlock>
                            </StackPanel>
                        </ListBoxItem>
                        [....]
                    </ListBox>
                </StackPanel>
            </SplitView.Pane>
        </SplitView>
Run Code Online (Sandbox Code Playgroud)

基本上,这个splitview被压缩,直到用户按下一个按钮然后将其设置IsPaneOpen为true,然后显示我的应用程序菜单.

问题是,我在菜单中的第一件事就是搜索框,无论我做什么,它似乎都会自动聚焦.它具有焦点的事实然后在手机上打开触摸键盘,这非常烦人并且隐藏了小型手机上的大部分菜单.

我尝试使用该TabIndex属性来给它一个巨大的数字,甚至为其他东西放一个较低的索引.

我也尝试将其设置IsTabStop为false,但似乎没有做任何事情.

是否有一种干净的方法可以防止盒子自动获得焦点?(除了禁用/隐藏元素然后再次启用/显示它)

小智 1

您可以尝试以下操作:

ListBox个名字:

<ListBox Name="MyListBox">
Run Code Online (Sandbox Code Playgroud)

然后,在调用 的位置IsPaneOpen添加true以下行:

Menu.IsPaneOpen = true;
MyListbox.Focus(FocusState.Programmatic);
Run Code Online (Sandbox Code Playgroud)

这会将焦点更改为ListBox元素并在您打开SplitView.