5

Ho la seguente XAML estratto:Come impedire TextBlock di ottenere messa a fuoco automatica

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

Fondamentalmente, questo SplitView viene compattato fino a quando l'utente preme un tasto che poi imposta il IsPaneOpen su true, che a sua volta mostra il mio menu dell'applicazione.

Il problema è che la prima cosa che ho nel menu è la casella di ricerca e sembra essere messa a fuoco automaticamente, non importa quello che faccio. Il fatto che sia focalizzato fa apparire la tastiera touch sui telefoni, che è molto fastidiosa e nasconde la maggior parte del menu sui piccoli telefoni.

Ho provato a giocare con la proprietà TabIndex per dargli un numero enorme o anche per inserire un indice inferiore per qualcos'altro.

Ho anche provato a impostare il IsTabStop su falso, ma questo non sembra fare nulla.

C'è un modo pulito per impedire al riquadro di ottenere automaticamente la messa a fuoco? (Oltre la disattivazione/nascondere l'elemento e quindi abilitazione/mostrando di nuovo)

risposta

1

Si può provare la seguente:

Dare ListBox un nome:

<ListBox Name="MyListBox"> 

Allora, dove si chiama IsPaneOpen a true, aggiungere la seguente riga:

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

questo cambierebbe la messa a fuoco per le ListBox elemen t e chiudere la tastiera quando si apre SplitView.

+0

Mentre questa soluzione ha funzionato per me, ho preferito la risposta di Elvis perché ritengo che sia più pulito. Stavo cercando di evitare del tutto il codice C# –

0

È il TextBox all'interno di AutoSuggestBox che recupera automaticamente lo stato attivo.

Per risolvere il problema, è possibile modificare il modello di AutoSuggestBox da:

Fare clic su 'Struttura documento' tag-> scegliere AutoSuggestBox elemento dal documento Tree-> click destro-> Modifica template-> Modifica copia .

Quindi VS aggiungerà il modello alla pagina Risorse. Aggiungere IsTabStop="False" alla casella di testo all'interno del template come di seguito:

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

Poi, si fermerà ottenere automaticamente messa a fuoco.

+0

Spiegazione pulita e semplice, mi piace! Grazie –

+3

Ora ha smesso di mettere a fuoco del tutto ... –

-1

ho semplice insieme TabIndex a 999 e questo ha risolto il mio problema:

<AutoSuggestBox TabIndex="999" /> 

prima ho provato accettato risposta, ma non fa per ottenere attenzione del tutto, vale a dire impossibile utilizzare testo a tutti (non può mettere a fuoco su di esso, nessuna tastiera si apre, ecc.).

+0

Downvoting come non solo questo è un hack e non una correzione, ma non risponde alla domanda originale.Sì 'IsTabStop' impedirà che l'elemento sia focalizzabile (è piuttosto esplicito nel nome) ma con il tuo suggerimento stai evitando il problema. Ora che ho più conoscenze XAML, credo che la risposta migliore sia Justin, quindi scelgo quella ora –

+0

Potrebbe non essere la corrispondenza esatta con la domanda, ma arrivo a questa pagina con il problema simile e grazie a quella pagina I trovato la soluzione Quindi penso che anche altre persone potrebbero essere interessate. Funziona per me, e la soluzione XAML è generalmente più affidabile, che cercare di superare manualmente e spostare l'attenzione a livello di programmazione. –

Problemi correlati