Estoy usando un ComboBox editable en wpf pero cuando intento establecer el foco desde el código C#, solo muestra la selección. pero quiero ir a la opción de edición (el cursor debe mostrarse para la entrada del usuario).Cómo agregar un foco a un ComboBox editable en WPF
Respuesta
Usted puede tratar de derivados de ComboBox y acceder al cuadro de texto interno, así:
public class MyComboBox : ComboBox
{
TextBox _textBox;
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
_textBox = Template.FindName("PART_EditableTextBox", this) as TextBox;
if (_textBox != null)
{
_textBox.GotKeyboardFocus += _textBox_GotFocus;
this.Unloaded += MyComboBox_Unloaded;
}
}
void MyComboBox_Unloaded(object sender, System.Windows.RoutedEventArgs e)
{
_textBox.GotKeyboardFocus -= _textBox_GotFocus;
this.Unloaded -= MyComboBox_Unloaded;
}
void _textBox_GotFocus(object sender, System.Windows.RoutedEventArgs e)
{
_textBox.Select(_textBox.Text.Length, 0); // set caret to end of text
}
}
En su código que usaría así:
<Window x:Class="EditableCbox.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:EditableCbox"
Title="Window1" Height="300" Width="300">
...
<local:MyComboBox x:Name="myComboBox" IsEditable="True" Grid.Row="0" Margin="4">
<ComboBoxItem>Alpha</ComboBoxItem>
<ComboBoxItem>Beta</ComboBoxItem>
<ComboBoxItem>Gamma</ComboBoxItem>
</local:MyComboBox>
...
</Window>
Esta solución ligeramente peligrosa, sin embargo, porque en las próximas versiones de WPF, Microsoft podría decidir agregar un manejador de eventos GotKeyboardFocus (o manejadores de eventos similares), lo que podría entrar en conflicto con el controlador de eventos en MyComboBox.
Usted puede probar este código:
var textBox = (comboBox.Template.FindName("PART_EditableTextBox", comboBox) as TextBox);
if (textBox != null)
{
textBox.Focus();
textBox.SelectionStart = textBox.Text.Length;
}
Ningún código citado aquí está funcionando. –
@RAJK Ese código funcionó perfectamente para mí. Resuelve adecuadamente el problema de necesitar atención en un cuadro combinado editable cuando se muestra una ventana por primera vez. Lo que no está claro es que debe colocar el código en el evento Loaded de la ventana que contiene el combobox editable. –
¡Perfecto! ¡Me solucionó muchos y muchos problemas! Muchas gracias! –
Sobre la base de la respuesta de user128300 anterior se me ocurrió una solución un poco más sencillo. En el constructor o ContextChangedHandler el código está esperando que el control se carga antes de poner el foco en el elemento de la interfaz de usuario
myComboBox.GotFocus += MyComboBoxGotFocus;
myComboBox.Loaded += (o, args) => { myComboBox.Focus(); };
Luego, en el foco, incluso manejador selecciono todo el texto desde el principio hasta el final
private void MyComboBoxGotFocus(object sender, RoutedEventArgs e)
{
var textBox = myComboBox.Template.FindName("PART_EditableTextBox", myComboBox) as TextBox;
if (textBox != null)
textBox.Select(0, textBox.Text.Length);
}
En xaml el cuadro combinado es editable. Al seleccionar todo el texto cuando el usuario introduzca una clave que está restableciendo el valor anterior
<ComboBox x:Name="myComboBox" IsEditable="True" />
Sobre la base de la respuesta de Rikker Serg, puede utilizar ese código en su constructor (después de InitializeComponent) y despachar en lugar de tener que crear personalizada controles o manejadores de eventos.
public NewMessageWindow()
{
InitializeComponent();
Dispatcher.BeginInvoke(new Action(() =>
{
var textBox = myComboBox.Template.FindName("PART_EditableTextBox", cbUsers) as TextBox;
if (textBox != null)
{
textBox.Focus();
textBox.SelectionStart = textBox.Text.Length;
}
}));
}
- 1. WPF Editable ComboBox
- 2. WPF Editable Combobox IsFocused problema
- 3. Agregar elementos a comboBox en WPF
- 4. ComboBox editable
- 5. Cómo agregar un elemento genérico a un ComboBox vinculado a una colección en WPF
- 6. Cómo usar MultiBinding en un WPF ComboBox
- 7. ¿Cómo puedo obtener los eventos TextChanged de un ComboBox editable
- 8. ¿Cómo puedo agregar un ComboBox editable al cuadro de diálogo de elementos comunes de Vista?
- 9. Cómo implementar DataGridComboBoxColumn editable en WPF DataGrid
- 10. ComboBox WPF con el cuadro de texto editable como un elemento
- 11. Encuadernación de una enumeración a un ComboBox en WPF + MVVM
- 12. Cómo alternar un UILabel entre editable y no editable
- 13. WPF Agregar un borde a un TextBlock
- 14. WPF: TreeView dentro de un ComboBox
- 15. elemento en ComboBox WPF
- 16. WPF ListBox editable
- 17. WPF Encuadernación Colección a ComboBox y Selección de un elemento
- 18. Cómo agregar un comando a un WPF TextBlock?
- 19. WPF: ComboBox TextSearch, ¿cómo funciona?
- 20. WPF Combobox DisplayMemberPath
- 21. WPF ComboBox SelectedItem
- 22. ComboBox editable con enlace al valor no en la lista
- 23. ¿Cómo establece programáticamente el foco en SelectedItem en un WPF ListBox que ya tiene foco?
- 24. Mover el foco a la siguiente celda al presionar la tecla Entrar ¿WPF DataGrid?
- 25. WPF IsEditable en ComboBox - cómo eliminar autocompletar
- 26. Mostrar un valor predeterminado para un WPF de datos ComboBox
- 27. Cuadrícula de datos editable en WPF
- 28. WPF: ComboBox anulable
- 29. ¿Cómo establecer maxlength para combobox en WPF?
- 30. WPF: Cómo personalizar SelectionBoxItem en ComboBox
¿Podría dar un ejemplo de su código? PD: No te devolví el voto. – Anvaka