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解決方案通常比嘗試手動克服和以編程方式移動焦點更可靠。 –