C# 如何防止TextBlock自动对焦

C# 如何防止TextBlock自动对焦,c#,xaml,win-universal-app,windows-10-universal,windows-10-mobile,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 Marg

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

项目
[....]
基本上,此拆分视图被压缩,直到用户按下一个按钮,然后将
IsPaneOpen
设置为true,从而显示我的应用程序菜单

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

我尝试使用
TabIndex
属性,要么给它一个巨大的数字,要么甚至为其他内容设置一个较低的索引

我还尝试将
IsTabStop
设置为false,但似乎没有任何效果


有没有一种干净的方法可以防止盒子自动聚焦?(除了禁用/隐藏元素,然后再次启用/显示它之外)

您可以尝试以下操作:

给列表框起一个名字:

<ListBox Name="MyListBox">

这会将焦点更改为
列表框
元素,并在打开
拆分视图

时关闭键盘。自动建议框中的文本框会自动检索焦点

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

单击“文档大纲”标记->从文档树中选择AutoSuggestBox元素->右键单击->编辑模板->编辑副本

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

<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>

...
...

然后,它将自动停止获取焦点。

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

<AutoSuggestBox TabIndex="999" />


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

虽然这个解决方案对我有效,但我还是喜欢埃尔维斯的答案,因为我觉得它更干净。我试图完全避免使用C#代码..干净简单的详细解释,我喜欢!感谢其他有这个问题的人。最终对我有效的是给一个按钮(或者其他你不介意聚焦的东西)一个2的TabIndex。所以,让我们把重点放在创业上。向下投票,因为这不仅是一种黑客行为,不是一种修复,而且也不能回答最初的问题。是的
IsTabStop
将阻止元素聚焦(名称中有点明确),但根据您的建议,您可以避免该问题。现在我有了更多的XAML知识,我相信最好的答案是Justin的,所以我现在选择了一个,它可能与问题不完全匹配,但我带着类似的问题来到这一页,感谢这一页,我找到了解决方案。所以我想其他人可能也对这个感兴趣。这对我来说是可行的,而且XAML解决方案通常比手动克服并以编程方式转移焦点更可靠。
<AutoSuggestBox TabIndex="999" />