如何防止TextBlock获得自动焦点

时间:2016-04-26 00:13:11

标签: c# xaml win-universal-app windows-10-universal windows-10-mobile

我有以下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>

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

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

我尝试使用TabIndex属性来为其提供大量数据,或者为其他内容添加较低的索引。

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

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

3 个答案:

答案 0 :(得分:1)

您可以尝试以下操作:

ListBox一个名字:

<ListBox Name="MyListBox">

然后,在您致电IsPaneOpentrue的地方,添加以下内容:

Menu.IsPaneOpen = true;
MyListbox.Focus(FocusState.Programmatic);

这会将焦点更改为ListBox元素,并在您打开SplitView时关闭键盘。

答案 1 :(得分:0)

AutoSuggestBox中的TextBox会自动检索焦点。

要解决此问题,您可以通过以下方式编辑AutoSuggestBox的模板:

点击&#39;文档大纲&#39; tag-&gt;从文档树中选择AutoSuggestBox元素 - &gt;右键单击 - &gt;编辑模板 - &gt;编辑副本。

然后VS会将模板添加到您的页面资源中。将IsTabStop="False"添加到模板内的TextBox,如下所示:

<ControlTemplate TargetType="AutoSuggestBox">
     <Grid>
        <VisualStateManager.VisualStateGroups>
           ...
        </VisualStateManager.VisualStateGroups>
        <TextBox x:Name="TextBox" IsTabStop="False" ScrollViewer.BringIntoViewOnFocusChange="False" DesiredCandidateWindowAlignment="BottomEdge" Header="{TemplateBinding Header}" Margin="0" PlaceholderText="{TemplateBinding PlaceholderText}" Style="{TemplateBinding TextBoxStyle}" Width="{TemplateBinding Width}" Canvas.ZIndex="0"/>
        <Popup x:Name="SuggestionsPopup">
           ...
        </Popup>
     </Grid>
</ControlTemplate>

然后,它将自动停止聚焦。

答案 2 :(得分:-2)

我简单地将TabIndex设置为999,这解决了我的问题:

<AutoSuggestBox TabIndex="999" />

在我尝试接受答案之前,但它没有完全集中注意力,即根本无法使用文本框(无法专注于它,没有弹出键盘等)。