Кнопка не отключается после нажатия на нее - PullRequest
0 голосов
/ 06 ноября 2019

Я создал кнопку, которая сбрасывает значение текстового поля к значению по умолчанию, как показано:

<Button x:Name="DefaultButton"
        Grid.Row="0"
        Grid.Column="3"
        Click="OnDefaultClicked"> 

Вот метод Click:

private void OnDefaultClicked(object sender, RoutedEventArgs e)
{
    DefaultButton.IsEnabled = false;
    displayedData = defaultData;

    //rest of method code

}

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

Я мог бы реализовать свойство IsEnabled в коде xaml и привязать его к методу, который определяет, должна ли кнопка быть включена на основе значения displayedData,но так как кнопка не включена повторно / не отключена где-либо еще в моем приложении или не используется для каких-либо других целей, это выглядит как излишнее ... насколько я знаю, событие Click должно справиться с этим в одиночку,Несмотря на это, моя главная проблема в том, что я просто не понимаю, почему кнопка не будет отключена до 2-го щелчка, поскольку метод OnDefaultClicked явно заявляет, что он должен быть отключен при нажатии.

Я что-то упустил?

1 Ответ

0 голосов
/ 13 ноября 2019

Оказывается, проблема была в остальной части моего кода. Выложенный выше фрагмент работал отлично. Я понял, что создал метод, который снова включает кнопку при изменении текста в поле, чтобы позволить пользователю снова сбросить ее на значение по умолчанию после внесения изменений. Поэтому, когда нажимается кнопка по умолчанию, текст в поле изменяется, и поэтому запускаются методы OnTextChanged и OnDefaultClicked, что вызывает одновременное включение и отключение кнопки.

Вот как я это исправил:

private bool DefaultClicked;
private void OnDefaultClicked(object sender, RoutedEventArgs e)
{
    DefaultButton.IsEnabled = false;
    DefaultClicked = true;
    displayedData = defaultData;

    //rest of method code

}
private void OnTextChanged(object sender, RoutedEventArgs e)
{
    if(!DefaultClicked)
    {
        DefaultButton.IsEnabled = true;
    }
    DefaultClicked = false;

    //rest of method code
}

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