WPF потерял фокус при нажатии кнопки - PullRequest
0 голосов
/ 03 января 2019

это код XAML для редактируемого поля со списком для ввода / выбора IP.

<ComboBox Name="ComboBoxServerIp" 
    Grid.Row="2"  Grid.Column="1"                                                            
    ItemsSource="{Binding ServerList}"          
    Text="{Binding SelectedServer, UpdateSourceTrigger=LostFocus, Mode=TwoWay}"
    IsEditable="True" IsReadOnly="False">
    <ComboBox.InputBindings>
        <KeyBinding Command="{Binding UpdateServerIpCommand}" Key="Enter"
                    CommandParameter="{Binding ElementName=ComboBoxServerIp ,Path=Text}"/>
    </ComboBox.InputBindings>   
</ComboBox>

как только пользователь завершит ввод IP, он запускает поток, который занимает около 10 секунд.поэтому я использовал комбинацию lostfocus и нажатой клавиши ввода для запуска обновления.

это работает нормально, за исключением случая использования, когда пользователь нажимает кнопку без первой потери фокуса или нажатиявойти.в этом случае обновление SelecterServer не запускается ПЕРЕД ВЫПОЛНЕНИЕМ КОМАНДЫ КНОПКИ .команда читает старое значение SelectedServer.не то, что в пользовательском интерфейсе

tl; dr - событие потерянного фокуса не вызывается в текстовом поле при нажатии кнопки в пользовательском интерфейсе.Как я могу заставить обновление со стороны пользовательского интерфейса?

Ответы [ 2 ]

0 голосов
/ 06 января 2019

обнаружил сообщение с совершенно противоположной проблемой, Проблема WPF Lost-Focus в том же элементе управления .

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

Focusable="False"

событие lostFocus срабатывает до события нажатия кнопки.все работает как положено.

0 голосов
/ 03 января 2019

Попробуйте это

Text="{Binding SelectedServer, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"

или, если это не вариант, возможно, прикрепленное свойство, как в этом ответе WPF - установить фокус при нажатии кнопки - без кода позади

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...