5

我有以下XAML摘录:如何防止TextBlock中从得到的自动对焦

 <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为真,这又显示了我应用菜单。

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

我试着玩TabIndex属性来给它一个巨大的数字,甚至把一个较低的索引为别的东西。

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

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

回答

1

你可以尝试以下方法:

ListBox一个名字:

<ListBox Name="MyListBox"> 

然后,在你打电话IsPaneOpentrue,添加以下行:

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

这将改变焦点到ListBox elemen t并在打开SplitView时关闭键盘。

+0

虽然这个解决方案对我有用,但我更喜欢Elvis的回答,因为我觉得它更干净。我试图避免C#代码.. –

0

这是AutoSuggestBox内部自动检索焦点的TextBox。

点击“文档大纲”标签 - >从文件树形选择AutoSuggestBox元>右键单击 - >编辑模板 - >编辑副本:

要解决此问题,您可以通过编辑AutoSuggestBox的模板。

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

然后,它会自动停止越来越关注的焦点。

+0

清洁和简单的详细解释,我喜欢它!谢谢 –

+3

现在它完全停止了焦点... –

-1

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

<AutoSuggestBox TabIndex="999" /> 

之前我试过接受的答案,但它会导致不能得到完全的焦点,即不可能在所有使用文本框(不能集中在它上面,没有键盘弹出等)。

+0

Downvoting不仅仅是一种破解而且不是修复,但它也不能回答原来的问题。是的,“IsTabStop”会阻止元素被聚焦(这在名称中是明确的),但是你的建议是避免这个问题。现在我已经有了更多的XAML知识,我相信最好的答案是Justin's,所以我现在选择一个。 –

+0

它可能不是与问题完全匹配的,但是我遇到了类似问题的页面,并且感谢那个页面I找到了解决方案。所以我认为其他人也可能对此感兴趣。它对我很有用,而且XAML解决方案通常比尝试手动克服和以编程方式移动焦点更可靠。 –