5

Ich habe folgende XAML Auszug verhindern:Wie TextBlock- davon ab, eine automatische Fokus

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

Grundsätzlich ist diese SPLITVIEW- verdichtet wird, bis der Benutzer eine Taste drückt, die dann die IsPaneOpen auf true setzt, die meine wiederum zeigt Anwendungsmenü.

Das Problem ist, die allererste Sache, die ich in der Speisekarte habe, ist das Suchfeld und es scheint automatisch fokussiert zu werden, egal was ich mache. Die Tatsache, dass es Fokus hat, bringt dann die Touch-Tastatur auf Telefonen, die sehr ärgerlich ist und den größten Teil des Menüs auf kleinen Telefonen verbirgt.

Ich habe versucht, mit der TabIndex Eigenschaft zu spielen, um es entweder eine große Zahl geben oder sogar einen niedrigeren Index für etwas anderes.

Ich habe auch versucht, die IsTabStop auf falsch einzustellen, aber das schien nichts zu tun.

Gibt es einen sauberen Weg, um zu verhindern, dass die Box automatisch fokussiert wird? (Außer Sperren/Ausblenden des Elements und dann die Aktivierung/zeigt es wieder)

Antwort

1

können Sie versuchen, die folgenden:

Geben ListBox einen Namen:

<ListBox Name="MyListBox"> 

Dann, in der Sie IsPaneOpen zu true nennen, fügen Sie die folgende Zeile:

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

Dies würde den Fokus auf die ListBox Verput ändern t und schließen Sie die Tastatur, wenn Sie die SplitView öffnen.

+0

Während diese Lösung für mich arbeitete, bevorzugte ich Elvis 'Antwort, weil ich denke, dass es sauberer ist. Ich habe versucht, C# Code insgesamt zu vermeiden. –

0

Es ist die TextBox in der AutoSuggestBox, die den Fokus automatisch abruft.

Klicken Sie auf ‚Dokumentgliederung‘ tag-> wählen AutoSuggestBox Element aus dem Dokument Tree-> rechte Maustaste> Bearbeiten Template-> Bearbeiten Sie eine Kopie:

das Problem zu beheben, können Sie die Vorlage von AutoSuggestBox durch bearbeiten .

Dann wird VS die Vorlage zu Ihrer Seite Ressourcen hinzufügen. In IsTabStop="False" zu dem Text in der Vorlage wie unten:

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

Dann wird es den Fokus automatisch stoppen zu bekommen.

+0

Saubere und einfache detaillierte Erklärung, ich liebe es! Danke –

+3

Nun hat es aufgehört, den Fokus ganz zu bekommen ... –

-1

I einfacher Satz TabIndex bis 999 und das ist mein Problem gelöst:

<AutoSuggestBox TabIndex="999" /> 

Bevor ich Antwort akzeptiert versucht, aber es verursacht nicht den Fokus ganz zu bekommen, also unmöglich Textbox überhaupt zu benutzen (nicht scharf stellen darauf erscheint keine Tastatur, etc).

+0

Downvoting als nicht nur das ist ein Hack und keine Lösung, aber es beantwortet auch nicht die ursprüngliche Frage.Ja 'IsTabStop' verhindert, dass das Element fokussierbar ist (es ist im Namen etwas explizit), aber mit Ihrem Vorschlag vermeiden Sie das Problem. Jetzt, da ich mehr XAML-Kenntnisse habe, glaube ich, dass die beste Antwort Justins ist, also wähle ich diese jetzt –

+0

Es mag nicht die genaue Übereinstimmung mit der Frage sein, aber ich komme auf diese Seite mit dem ähnlichen Problem und danke dieser Seite fand die Lösung. Also denke ich, dass andere Leute auch daran interessiert sein können. Es funktioniert für mich, und XAML-Lösung ist im Allgemeinen zuverlässiger, als manuell zu überwinden und den Fokus programmatisch zu verschieben. –