Breve historia: Un ListBox dentro de un ámbito de enfoque no permite seleccionar un elemento.Usar ListBox dentro del Alcance
largo de la historia:
estoy tratando de hacer un widget contextual para la entrada de datos. Tengo el panel principal con varios campos. Debajo de eso, tengo un panel con FocusManager.FocusScope="True"
. Este panel se completará con el widget relevante para el campo que actualmente tiene foco. Por ejemplo, seleccionar un campo de fecha mostraría un calendario en la parte inferior de la pantalla.
Tengo varios controles que requieren que el usuario seleccione uno de muchos valores de una lista. Puse un ListBox en el ámbito de enfoque, pero no puedo seleccionar ningún elemento. Cuando se selecciona algo (programáticamente) y hace clic en ListBox, anula la selección de todo.
He probado algunos eventos, y no está recogiendo eventos MouseDown, pero está recogiendo eventos MouseMove. Dispara GotFocus cada vez que hago clic en un elemento, pero nunca dispara LostFocus. No estoy seguro de lo que esto significa, pero espero que pueda ser útil para alguien que está leyendo esto.
Aquí está el código que estoy usando para mostrar el widget contextual. Tengo el siguiente XAML en mi ventana:
<Grid x:Name="EntryWidget" FocusManager.IsFocusScope="True">
<Grid.Resources>
<ListBox x:Key="List" ItemsSource="{Binding}" />
</Grid.Resources>
</Grid>
utilizo el Window.GotFocus evento enrutado para actualizar el widget con el control apropiado, así:
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);
}
}
}
Así:
¿Hay alguna forma de que el ListBox funcione dentro de un ámbito de enfoque?
¿O hay otro control de lista que funciona mejor dentro de un alcance de enfoque?
¿O estoy tomando el enfoque equivocado al usar los alcances de enfoque? Mis requisitos: el usuario debe poder seleccionar un elemento de una lista desplazable, que ingresará el valor en el campo actual. El campo actual no debe perder el foco.
No estoy muy seguro de lo que está intentando hacer, pero ha analizado la vinculación de vistas de colecciones, es cuando se selecciona un elemento de una colección, la otra colección se actualiza automáticamente. Aquí hay un enlace de MSDN http://msdn.microsoft.com/en-us/library/system.windows.data.collectionview.aspx – mihajlv
Solo tengo un ListBox. Cuando se selecciona un elemento, debe actualizar el TextBox que tiene el foco. Pero no puedo seleccionar ningún artículo. –
qué tal esto, si tiene un dp de tipo cuadro de texto que se actualiza mediante un cuadro de texto cuando se enfoca, estableciendo el dp igual a él. Luego, cuando haces clic en una lista, actualizas el dp que tiene el cuadro de texto del último elemento que tuvo el foco, sé que es una solución, pero debería funcionar. – mihajlv