2009-09-09 17 views
10

Il comportamento di ListBox è che il primo elemento viene selezionato automaticamente, come posso evitarlo ??ListBox seleziona sempre automaticamente il primo elemento

Nota: preferisco farlo con xaml puro, se hai idee code-behind, per favore non ti preoccupare.

+0

penso u significava, che quando u spostando il cursore sulla casella di riepilogo, 1 ° punto è sempre selezionata? (evidenziato..e se si preme verso il basso, il secondo elemento ottiene lo stato attivo?) –

+0

1) per colui che ha contrassegnato la mia domanda come duplicata, non ha capito la domanda, io sono colui che ha pubblicato anche il duplicato. 2) @Madi, quando la casella di riepilogo è visualizzata, il suo primo elemento viene selezionato automaticamente, voglio disabilitare questa funzione. – Shimmy

+0

hmm .. puoi usare FocusManager per mettere a fuoco un determinato elemento/elemento .. (tutto in xaml) ...tuttavia non riesco a capire come focalizzarsi sul nulla: D –

risposta

5

Beh ho provato questo utilizzando FocusManager.FocusedElement .. e reso il focus intial a
listbox stessa .. quindi ha il focus..but no viene selezionato elemento .. se u premere verso il basso o scheda sarà selezionato ..il primo elemento della casella di riepilogo ...

<Window 
    ...... 
    FocusManager.FocusedElement="{Binding ElementName=listbox2}"> 
    <ListBox x:Name="listbox2" HorizontalAlignment="Left" 
     VerticalAlignment="Bottom" Width="117.333" Height="116" 
     Margin="30.667,0,0,30"> 
     <ListBoxItem>Jim</ListBoxItem> 
     <ListBoxItem>Mark</ListBoxItem> 
     <ListBoxItem>Mandy</ListBoxItem> 
</ListBox> 
4

È possibile impostare SelectedIndex su -1:

<ListBox ItemsSource="{Binding MyData}" SelectedIndex="-1"/> 

Nota: voglio fare questo con puro XAML, se avete dei code-behind idee allora per favore non preoccupatevi se stessi.

Purtroppo non si può fare tutto in XAML ... di solito si può evitare di code-behind, ma è ancora necessario scrivere convertitori, estensioni di markup o proprietà associate

+1

Ero alla ricerca di una risposta come la tua. l'unico piccolo problema è che non funziona. – Shimmy

+2

non funziona :) –

+1

+1, non puoi fare tutto in XAML. – user7116

1

SelectedIndex è la proprietà che sei cercando ? O forse non capisco il tuo punto di ...

+1

hai ottenuto il mio punto, ma quando ho impostato selectindex su -1 o alternativamente selezionato elemento su x: Null, il primo elemento è ancora selezionato – Shimmy

1
<ListBox SelectioMode="Single" SelectedIndex="-1"/> 
+0

Non voglio che la modalità di selezione sia Single. – Shimmy

-1

Aggiungere un elemento vuoto.

1

Lo stesso problema qui. Qualcuno ha trovato una soluzione "pulita"?
Il problema è lo stesso qui, causa un sacco di trigger da eseguire.

Ovvio soluzione/fix:
1) Rimuovere i gestori di eventi SelectionChanged da XAML
2) Aggiungere i gestori nel costruttore dopo InitializeComponents ha caricato la casella di riepilogo.

+0

Domande e commenti correlati essere commenti su quello esistente. – Shimmy

8

Prova

IsSynchronizedWithCurrentItem="False"

5

rimuovere IsSynchronizedWithCurrentItem = "True" un inserirlo con il prossimo evento SelectionChanged, se necessario. Questo ha risolto il mio problema

2

Ecco una tecnica che uso abbastanza spesso. Si basa sull'esempio precedente di aggiunta dell'attributo FocusedElement al numero Window o UserControl.

Il mio accordo è che non voglio che QUALSIASI controllo della finestra sia attivo. La soluzione per me è creare un controllo fittizio che non abbia UI e assegnare attenzione a questo. Si dà il caso che Control si adatta perfettamente:

<UserControl 
    x:Class="MyControl" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    FocusManager.FocusedElement="{Binding ElementName=focus_thief}" 
    mc:Ignorable="d"> 
    <Grid> 
     <!-- no renderable UI --> 
     <Control Name="focus_thief"/> 
     <!-- wants focus, but won't get it --> 
     <ListBox> 
      <ListBoxItem>First Item</ListBoxItem> 
     </ListBox> 
    </Grid> 
</UserControl> 
Problemi correlati