Как обработать диалог подтверждения до элегантного изменения состояния кнопки переключения в WPF? - PullRequest
0 голосов
/ 21 апреля 2020

Скажем, у меня есть кнопка с именем btn1, которая показывает Open, когда состояние не отмечено, и Close, когда проверяется состояние. Я определяю две функции, чтобы просто обрабатывать его отмеченное / не отмеченное событие:

private void Btn_Checked(object sender, RoutedEventArgs e)
{
  // Do some open operation.
}

и

private void Btn_Unchecked(object sender, RoutedEventArgs e)
{
  // Do some close operation.
}

Теперь я хочу показать диалоговое окно подтверждения, когда пользователь нажимает кнопку переключения. Поэтому я добавляю MessageBox до do some open/close operation. Код стал

private void Btn_Checked(object sender, RoutedEventArgs e)
{
  MessageBoxResult res = MessageBox.Show("Do you really want to open it?", "app name", MessageBoxButton.OKCancel, MessageBoxImage.Warning);
  if(res == MessageBoxResult.OK)
  {
    // Do some open operation.
  }
  else
  {
    btn1.IsChecked = false;
  }
}

Не проверенный обработчик похож на проверенный обработчик.

Но после запуска этого кода, если я решу отменить диалог, тогда checked / * В диалоговом окне 1017 * постоянно появляется альтернативное всплывающее окно.

Итак, как мне элегантно справиться с этим делом?

1 Ответ

0 голосов
/ 21 апреля 2020

Yahey! Я нашел решение, но, возможно, не элегантно.

private void Btn_Checked(object sender, RoutedEventArgs e)
{
  if(btn1.Tag != null)
  {
    btn1.Tag = null;
    return;
  }

  MessageBoxResult res = MessageBox.Show("Do you really want to open it?", "app name", MessageBoxButton.OKCancel, MessageBoxImage.Warning);
  if(res == MessageBoxResult.OK)
  {
    // Do some open operation.
  }
  else
  {
    btn1.Tag = "ignore";
    btn1.IsChecked = false;
  }
}

private void Btn_Unchecked(object sender, RoutedEventArgs e)
{
  if(btn1.Tag != null)
  {
    btn1.Tag = null;
    return;
  }

  MessageBoxResult res = MessageBox.Show("Do you really want to close it?", "app name", MessageBoxButton.OKCancel, MessageBoxImage.Warning);
  if(res == MessageBoxResult.OK)
  {
    // Do some close operation.
  }
  else
  {
    btn1.Tag = "ignore";
    btn1.IsChecked = true;
  }
}
...