c# - textBox incrustado en un foco inicial ListBox
wpf setfocus (2)
Quiero establecer el foco en el primer elemento ListBox que es un cuadro de texto. Quiero poder escribir en él inmediatamente sin la necesidad de hacer clic o presionar cualquier tecla. Intento esto pero no funciona:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
listBox1.Items.Add(new TextBox() { });
(listBox1.Items[0] as TextBox).Focus();
}
En caso de que cualquier otro cuerpo tenga este problema. Un UIElement tiene que estar completamente cargado antes de poder enfocarlo. por lo tanto esto se puede hacer muy simple:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
listBox1.Items.Add(new TextBox() { });
var txBox = listBox1.Items[0] as TextBox;
txBox.Loaded += (txbSender, args) => (txbSender as TextBox)?.Focus();
}
es estúpido pero solo funciona si esperas un momento, prueba esta versión:
using System;
using System.Windows;
using System.Windows.Controls;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var textBox = new TextBox() {};
listBox1.Items.Add(textBox);
System.Threading.ThreadPool.QueueUserWorkItem(
(a) =>
{
System.Threading.Thread.Sleep(100);
textBox.Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Normal,
new Action(
delegate()
{
textBox.Focus();
}
));
}
);
}
}
}
Estuve probando localmente y no pude solucionarlo hasta que encontré esta pregunta y la respuesta fuzquat allí, así que vótame aquí y allí: D