Breve storia: un ListBox all'interno di un ambito di messa a fuoco non consente di selezionare un elemento.Utilizzare ListBox in Focus Scope
Lunga storia:
Sto cercando di fare un widget sensibile al contesto per l'immissione dei dati. Ho il pannello principale con diversi campi. Di seguito, ho un pannello con FocusManager.FocusScope="True"
. Questo pannello verrà riempito con il widget pertinente per il campo che al momento è focalizzato. Ad esempio, selezionando un campo data verrà mostrato un calendario nella parte inferiore dello schermo.
Ho diversi controlli che richiedono all'utente di selezionare uno dei molti valori da un elenco. Metto un ListBox nella gamma di messa a fuoco, ma non riesco a selezionare alcun elemento. Quando qualcosa è selezionato (programmaticamente) e fai clic su ListBox, deseleziona tutto.
Ho verificato alcuni eventi e non sta rilevando eventi MouseDown, ma sta rilevando eventi MouseMove. Spara GotFocus ogni volta che clicco su un oggetto, ma non spara mai a LostFocus. Non sono sicuro di cosa significhi, ma spero che possa essere d'aiuto a qualcuno che sta leggendo questo.
Ecco il codice che sto usando per visualizzare il widget sensibile al contesto. Ho il seguente codice XAML nella mia finestra:
<Grid x:Name="EntryWidget" FocusManager.IsFocusScope="True">
<Grid.Resources>
<ListBox x:Key="List" ItemsSource="{Binding}" />
</Grid.Resources>
</Grid>
uso il Window.GotFocus evento indirizzato ad aggiornare il widget per il controllo appropriato, in questo modo:
private void Window_GotFocus(object sender, RoutedEventArgs e)
{
FrameworkElement focus = (FrameworkElement)FocusManager.GetFocusedElement(this);
EntryWidget.Children.Clear(); // Could this be the culprit?
object tag = focus.Tag;
if (tag != null)
{
if (EntryWidget.Resources.Contains(tag))
{
EntryWidget.Children.Add(EntryWidget.Resources[tag] as UIElement);
}
}
}
Quindi:
C'è un modo per far funzionare il ListBox in un ambito di messa a fuoco?
Oppure esiste un altro controllo di elenco che funzioni meglio all'interno di un ambito di messa a fuoco?
O sto prendendo l'approccio sbagliato utilizzando gli ambiti di messa a fuoco? I miei requisiti: l'utente deve essere in grado di selezionare una voce da un elenco a scorrimento, che entrerà il valore nel campo corrente. Il campo corrente non dovrebbe perdere la concentrazione.
Non sono abbastanza sicuro di ciò che si sta tentando di fare, ma si è guardato al collegamento delle viste di raccolta, questo è quando un elemento di una raccolta viene selezionato mentre l'altra raccolta viene aggiornata automaticamente. Ecco un collegamento da MSDN http://msdn.microsoft.com/en-us/library/system.windows.data.collectionview.aspx – mihajlv
Ho solo un ListBox. Quando un elemento è selezionato, dovrebbe aggiornare il TextBox che ha lo stato attivo. Ma non posso selezionare alcun oggetto. –
come su questo, se si dispone di un dp di tipo textbox che viene aggiornato da una casella di testo quando diventa attivo, impostando il dp uguale a se stesso. Quindi quando fai clic su un elenco, aggiorni il dp che ha la casella di testo dell'ultimo elemento che ha il focus, so che è una soluzione, ma dovrebbe funzionare. – mihajlv