powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Невозможно в текстовое окно дочернего компонента установить фокус
17 сообщений из 17, страница 1 из 1
Невозможно в текстовое окно дочернего компонента установить фокус
    #39303211
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На основной форме есть TextBlock и UserControl1. Компонент UserControl1 содержит в себе TextBox. Вот, хочется мне щелчком по TextBlock переводить фокус на этот TextBox.
Почему не переводится фокус в текстовое окно по щелчку по TextBlock?
Использовал usercontrol.Focus();
Даже использовал usercontrol.SetFocus(), соответственно, на usercontrol создавал функцию SetFocus, а в ней было txt.Focus() - не работает!((

Пример проекта:

Основное окно:
Код: xml
1.
2.
3.
4.
5.
6.
    <StackPanel>
        <TextBlock  
            x:Name="txtCity" 
            Text="тыкать сюда, чтоб фокус в текст бокс перешёл" MouseLeftButtonDown="txtCity_MouseLeftButtonDown" Height="41" HorizontalAlignment="Center" VerticalAlignment="Center" />
        <local:UserControl1 x:Name="usercontrol" />
    </StackPanel>


Его код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void txtCity_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            usercontrol.Focus();
        }
    }


Юзер контрол:
Код: xml
1.
2.
3.
4.
5.
<StackPanel >
    <TextBlock Text="Город:" />
    <TextBox x:Name="txtCity" Text="dsfdsfsd" TabIndex="0" />
    <Button x:Name="cmdOk" Content="ok" />
</StackPanel>

...
Рейтинг: 0 / 0
Невозможно в текстовое окно дочернего компонента установить фокус
    #39303251
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте через Dispatcher с приоритетом Input, должно сработать
...
Рейтинг: 0 / 0
Невозможно в текстовое окно дочернего компонента установить фокус
    #39303254
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял(
...
Рейтинг: 0 / 0
Невозможно в текстовое окно дочернего компонента установить фокус
    #39303257
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А через работу с фокусом это никак нельзя сделать?
...
Рейтинг: 0 / 0
Невозможно в текстовое окно дочернего компонента установить фокус
    #39304527
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если фокус нужен на TextBox, так ставьте его на TextBox
Код: c#
1.
txtCity.Focus();


а не на UserControl. Свойство Focusable имеет значение true в т. ч. у UserControl.
...
Рейтинг: 0 / 0
Невозможно в текстовое окно дочернего компонента установить фокус
    #39304566
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ilya81Если фокус нужен на TextBox, так ставьте его на TextBox
Код: c#
1.
txtCity.Focus();



а не на UserControl. Свойство Focusable имеет значение true в т. ч. у UserControl.
Делал уже
Charles WeylandДаже использовал usercontrol.SetFocus(), соответственно, в usercontrol создавал функцию SetFocus, а в ней было txt.Focus() - не работает!((
Ситуация в этом случае получается следующая - в текстовом окне рисуется вертикальная линия (типа, "курсор ввода") - но он не мигает и ввести с клавиатуры ничего нельзя.
Щёлкну мышкой (или Tab'ом нащупаю) по текстовому полю - тогда курсор замигает.
...
Рейтинг: 0 / 0
Невозможно в текстовое окно дочернего компонента установить фокус
    #39304571
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через Dispatcher с приоритетом Input пробовали?
...
Рейтинг: 0 / 0
Невозможно в текстовое окно дочернего компонента установить фокус
    #39304575
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesЧерез Dispatcher с приоритетом Input пробовали?

Charles WeylandНе понял(
я гуглил, чтобы понять, о чём речь, но не понял) поэтому не пробовал
...
Рейтинг: 0 / 0
Невозможно в текстовое окно дочернего компонента установить фокус
    #39304632
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если кто-нибудь сможет помочь с этим вопросом - будет здорово!
...
Рейтинг: 0 / 0
Невозможно в текстовое окно дочернего компонента установить фокус
    #39304665
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandЕсли кто-нибудь сможет помочь с этим вопросом - будет здорово!
как то так, Dispatcher тут берётся в рамках класса наследованного от DispatcherObject. Если метод статический то можно получить текущий диспатчер Dispatcher.CurrentDispatcher

Код: c#
1.
2.
3.
4.
5.
6.
        public void FocusByDispatcher(IInputElement element)
        {
            if (element == null) throw new ArgumentNullException(nameof(element));
            var operation = new DispatcherOperationCallback(o => ((IInputElement)o).Focus());
            Dispatcher.BeginInvoke(DispatcherPriority.Input, operation, PART_ListBox);
        }
...
Рейтинг: 0 / 0
Невозможно в текстовое окно дочернего компонента установить фокус
    #39304672
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что это за "nameof" и "PART_ListBox"?
...
Рейтинг: 0 / 0
Невозможно в текстовое окно дочернего компонента установить фокус
    #39304673
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Невозможно в текстовое окно дочернего компонента установить фокус
    #39304685
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland
сори PART_ListBox надо заменить на element, nameof(element) можно заменить на @"element"
...
Рейтинг: 0 / 0
Невозможно в текстовое окно дочернего компонента установить фокус
    #39304690
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
        public void FocusByDispatcher(IInputElement element)
        {
            if (element == null) throw new ArgumentNullException("element");
            var operation = new DispatcherOperationCallback(o => ((IInputElement)o).Focus());
            Dispatcher.BeginInvoke(DispatcherPriority.Input, operation, element);
        }


вот так будет правильно
...
Рейтинг: 0 / 0
Невозможно в текстовое окно дочернего компонента установить фокус
    #39304766
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ноль реакции.
Что раньше, что сейчас.
Вот фрагмент кода:
Код: c#
1.
2.
3.
4.
        private void txtCity_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            FocusByDispatcher(usercontrol);
        }


Функция выполняется, фокус не передаётся :(
...
Рейтинг: 0 / 0
Невозможно в текстовое окно дочернего компонента установить фокус
    #39304769
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о, вот так получилось:
Код: c#
1.
2.
3.
4.
        private void txtCity_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            usercontrol.SetFocus();
        }



а уже внутри функции SetFocus() прописал FocusByDispatcher(txtMytextbox);

Почему не работает обычный Focus() в данном случае? Даже если внутри SetFocus прописать txtMytextbox.Focus() - появится вертикальный курсор, но фокус будет витать где-то в другом месте..
...
Рейтинг: 0 / 0
Невозможно в текстовое окно дочернего компонента установить фокус
    #39305978
maratoss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland,
Попробуй Keyboard.Focus(theButtonThatYouWantToFocus);

http://stackoverflow.com/questions/19289994/get-and-restore-wpf-keyboard-focus
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Невозможно в текстовое окно дочернего компонента установить фокус
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]