[英]How to prevent TextBlock from getting automatic focus
我有以下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,但似乎沒有做任何事情。
是否有一種干凈的方法可以防止盒子自動獲得焦點? (除了禁用/隱藏元素然后再次啟用/顯示它)
您可以嘗試以下方法:
給ListBox
一個名字:
<ListBox Name="MyListBox">
然后,在將IsPaneOpen
調用為true
,添加以下行:
Menu.IsPaneOpen = true;
MyListbox.Focus(FocusState.Programmatic);
這會將焦點更改為ListBox
元素,並在打開SplitView
時關閉鍵盤。
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>
然后,它將自動停止聚焦。
我簡單地將TabIndex設置為999,這解決了我的問題:
<AutoSuggestBox TabIndex="999" />
在我嘗試接受答案之前,它會導致完全無法獲得焦點,即根本無法使用文本框(無法專注於它,不會彈出鍵盤等)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.