textBox, встроенный в начальный фокус ListBox - PullRequest
2 голосов
/ 23 сентября 2011

Я хочу установить фокус на первый элемент ListBox, который является текстовым полем. Я хочу иметь возможность писать в нем сразу же, без необходимости нажимать на него или нажимать любую клавишу. Я пытаюсь это, но не работает:

        private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        listBox1.Items.Add(new TextBox() { });
        (listBox1.Items[0] as TextBox).Focus();

    }

Ответы [ 2 ]

4 голосов
/ 23 сентября 2011

это глупо, но это работает, только если вы подождите немного, попробуйте эту версию:

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();
                            }
                            ));
                }
                );
        }
    }
}

Я проводил локальное тестирование и не мог это исправить, пока не нашел этот вопрос и не нашел ответ на вопрос fuzquat, поэтому проголосуйте за меня здесь и за него: D

Невозможно установить фокус на дочерний элемент UserControl

0 голосов
/ 06 июля 2017

В случае, если у кого-либо еще есть эта проблема. UIElement должен быть полностью загружен, прежде чем вы сможете сфокусировать его. поэтому это можно сделать очень просто:

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();
}
...