Puede resolver este problema con la siguiente verificación:
private void myComboBox_GotFocus(object sender, RoutedEventArgs e)
{
if (e.OriginalSource.GetType() == typeof(ComboBoxItem))
return;
//Your code here
}
Este código filtrará todos los eventos de foco de artículos (porque utilizan evento de enrutamiento de burbujas). Pero hay otro problema: el comportamiento específico de WPF ComboBox focus: cuando abres la lista desplegable con elementos, tu ComboBox pierde el foco y los elementos se ponen. Cuando selecciona algún elemento, el elemento pierde el foco y ComboBox vuelve. La lista desplegable es como otro control. Esto se puede ver por código simple:
private void myComboBox_GotFocus(object sender, RoutedEventArgs e)
{
if (e.OriginalSource.GetType() != typeof(ComboBoxItem))
{
Trace.WriteLine("Got " + DateTime.Now);
}
}
private void myComboBox_LostFocus(object sender, RoutedEventArgs e)
{
if (e.OriginalSource.GetType() != typeof(ComboBoxItem))
{
Trace.WriteLine("Lost " + DateTime.Now);
}
}
por lo que obtendrá de todos modos al menos dos eventos de foco: cuando se selecciona ComboBox y cuando se selecciona algo en él (enfoque volverá al cuadro combinado).
Para filtrar el enfoque devuelto después de seleccionar el elemento, puede intentar utilizar los eventos DropDownOpened
/DropDownClosed
con algún indicador de campo.
Así que el código final con sólo 1 caso de conseguir el enfoque:
private bool returnedFocus = false;
private void myComboBox_GotFocus(object sender, RoutedEventArgs e)
{
if (e.OriginalSource.GetType() != typeof(ComboBoxItem) && !returnedFocus)
{
//Your code.
}
}
private void myComboBox_LostFocus(object sender, RoutedEventArgs e)
{
if (e.OriginalSource.GetType() != typeof(ComboBoxItem))
{
ComboBox cb = (ComboBox)sender;
returnedFocus = cb.IsDropDownOpen;
}
}
elegir de esta ejemplos de lo que realmente se necesita más para su aplicación.
Buena información en esta otra pregunta. http://stackoverflow.com/questions/830510/issue-with-wpf-focus [link] (http://stackoverflow.com/questions/830510/issue-with-wpf-focus) – Mikeb