5

Mam następujące XAML Fragment:Jak zapobiegać TextBlock z coraz automatycznej ostrości

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

Zasadniczo, splitview ubija aż użytkownik naciśnie przycisk, który następnie ustawia IsPaneOpen true, co z kolei wskazuje na moją menu aplikacji.

Problem polega na tym, że pierwszą rzeczą, którą mam w menu, jest pole wyszukiwania i wydaje się, że skupia się automatycznie bez względu na to, co robię. To, że się skupia, wywołuje dotykową klawiaturę na telefonach, co jest bardzo denerwujące i skrywa większość menu na małych telefonach.

Próbowałem grać z właściwością TabIndex, aby nadać jej ogromną liczbę lub nawet obniżyć indeks dla czegoś innego.

Próbowałem również ustawić wartość IsTabStop na wartość false, ale nie wydawało się to robić.

Czy istnieje czysty sposób, aby zapobiec automatycznemu uzyskiwaniu ostrości przez pole? (Poza tym wyłączenie/ukrywanie elementu, a następnie włączenie/pokazując go ponownie)

Odpowiedz

1

Można spróbować wykonać następujące czynności:

Daj ListBox nazwę:

<ListBox Name="MyListBox"> 

Następnie, gdzie zadzwonić IsPaneOpen do true, dodaj następującą linię:

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

To zmieniłoby fokus na elemenów ListBox t i odłóż klawiaturę po otwarciu urządzenia SplitView.

+0

Chociaż to rozwiązanie sprawdziło się, wolałem odpowiedź Elvisa, ponieważ uważam, że jest bardziej czysty. Próbowałem całkowicie uniknąć kodu C# –

0

To TextBox wewnątrz AutoSuggestBox automatycznie pobiera fokus.

Aby rozwiązać ten problem, można zmodyfikować szablon AutoSuggestBox przez:

kliknij 'Document Outline' tag-> Wybierz AutoSuggestBox element z podobnego do drzewa dokumentu> right click> Edytuj Template-> Edytuj kopię .

Następnie VS doda szablon do strony Zasoby. Dodaj IsTabStop="False" do pola tekstowego wewnątrz szablonu jak poniżej:

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

Następnie zatrzyma się automatycznie ostrość.

+0

Czyste i proste szczegółowe wyjaśnienie, uwielbiam to! Dzięki –

+3

Teraz przestało się koncentrować całkowicie ... –

-1

ja prosty zestaw TabIndex do 999 i to rozwiązać mój problem:

<AutoSuggestBox TabIndex="999" /> 

Przed Próbowałem zaakceptowane odpowiedź, ale nie przyczynia się do uzyskania ostrości całkowicie, tzn da się wykorzystać tekstowe w ogóle (nie może skupić na nim nie pojawia się żadna klawiatura itp.).

+0

Downsinging jako nie tylko jest hackem, ale nie rozwiązuje problemu oryginalnego.Tak, 'IsTabStop' zapobiegnie ustawianiu elementu (może to być wyraźne w nazwie), ale z twoją sugestią unikasz problemu. Teraz, gdy mam więcej wiedzy o XAML, wierzę, że najlepszą odpowiedzią jest Justin, więc wybieram to teraz. –

+0

Może to nie być dokładnie pasujące do pytania, ale dostaję się na tę stronę z podobnym problemem i dziękuję tej stronie I znalazłem rozwiązanie. Myślę więc, że inne osoby też mogą być zainteresowane. To działa dla mnie, a rozwiązanie XAML jest ogólnie bardziej niezawodne, niż próba manualnego pokonania i przesunięcia fokusu programowo. –