5

Aşağıdaki XAML alıntı vardır: Kullanıcı daha sonra sırayla gösterir true IsPaneOpen, ayarlar bir düğmeye basar kadargirmesini TextBlock önlemenin yolları otomatik odaklama

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

Temelde, bu SplitView sıkıştırılmış olan benim uygulama menüsü.

Sorun şu ki, menüde sahip olduğum ilk şey arama kutusudur ve ne yaparsam yapayım otomatik olarak odaklanmış gibi görünmektedir. Odak noktası, dokunmatik klavyeyi telefonlara getiriyor, bu da çok rahatsız edici ve küçük telefonlarda menünün çoğunu gizliyor.

TabIndex özelliğiyle oynamayı denedim ya çok büyük bir sayı verdim ya da başka bir şey için daha düşük bir indeks koydum.

Ayrıca IsTabStop yanlış ayarlamayı denedim, ancak bu bir şey yapmadı.

Kutunun odağı otomatik olarak kazanmasını önlemek için temiz bir yol var mı? , Sen true için IsPaneOpen çağrı nerede, Sonra

<ListBox Name="MyListBox"> 

:

ListBox bir ad verin:

cevap

1

(/ devre dışı bırakma elemanı gizleme ve tekrar gösteren etkinleştirme/yanında) Aşağıdaki deneyebilirsiniz

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

Bu ListBox Elemen odağı değiştirecek: aşağıdaki satırı ekleyin t ve SplitView'u açtığınızda klavyeyi kapatın.

+0

Bu çözüm benim için çalışırken, Elvis'in cevabını tercih ettim çünkü daha temiz olduğunu hissediyorum. Tamamen C# kodundan kaçınmaya çalışıyordum .. –

0

Odağı otomatik olarak alan AutoSuggestBox içindeki TextBox'tır.

Click 'belgeyi anahat' etiketi-> sağ Click> Düzen Template-> Belge Ağacı gelen AutoSuggestBox Eleman seçim Edit> bir kopya:

sorunu çözmek için, tarafından AutoSuggestBox şablonunu düzenleyebilirsiniz .

Daha sonra VS Şablonu sayfanıza Kaynaklar ekler. Aşağıdaki gibi şablonu içinde TextBox IsTabStop="False" ekleyin:

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

Ardından, otomatik odak elde duracaktır.

+0

Temiz ve basit detaylı açıklama, bunu seviyorum! Teşekkürler –

+3

Şimdi tamamen odaklanmayı kesti ... –

-1

999 Basit seti Tabındex ve bu benim sorun çözüldü: Ben cevabı kabul çalıştı Önce

<AutoSuggestBox TabIndex="999" /> 

, ama hepsi de metin kutusu kullanmak yani tamamen imkansız odağı almak için değil neden (odaklanamazsınız üstünde, hiçbir klavye açılır, vb).

+0

Sadece bu bir hack değil, bir düzeltme değil, aynı zamanda orijinal soruya cevap vermiyor.Evet 'IsTabStop', öğenin odaklanabilmesini engeller (adı açık bir şekilde bellidir), ancak önerinizle problemden kaçınılırsınız. Şimdi daha fazla XAML bilgisine sahip olduğum için, en iyi cevabın Justin olduğuna inanıyorum ki şimdi bir tane seçiyorum –

+0

Bu soruyla tam olarak uyuşmuyor olabilir, ama bu sayfaya benzer bir sorunla ulaşıyorum ve bu sayfaya teşekkür ediyorum. çözümü buldu. Bu yüzden başkalarının da ilgisini çekebileceğini düşünüyorum. Bu benim için çalışıyor ve XAML çözümü genellikle, programatik olarak odaklamayı üstesinden gelmeye ve kaydırmaya çalışmaktan daha güvenilirdir. –