WPF - 停止单选按钮单击消息框

时间:2016-03-22 19:31:58

标签: c# wpf xaml

我有一组动态生成的单选按钮,单击它们时,会填充大量带有数据的文本框。它们绑定到视图模型上的属性,该属性根据单选按钮的标签文本从服务中提取数据。

我想要做的是在单击单选按钮时显示MessageBox,因此如果用户意外(或有意)点击另一个单选按钮,我可以确认他们想要做什么。

我可以捕获click事件并显示MessageBox,但无论如何都会更改底层属性,从而触发数据更改。有没有一种方法可以在显示MessageBox时停止执行? Click事件是否使用了错误的事件?我是WPF的新手。

单选按钮点击事件:

private void RadioButton_Click(object sender, RoutedEventArgs e)
{
  var radioButton = sender as RadioButton;
  MessageBoxResult result = MessageBox.Show("Choosing this sample will override any changes you've made. Continue?", "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Question);
  if (result == MessageBoxResult.Yes)
  {
    radioButton.IsChecked = true;
    return;
  }
}

在方法的第二行之后和返回用户选择之前,无论如何都要更新属性。

1 个答案:

答案 0 :(得分:2)

选中Click后会引发

RadioButton事件,但您可以使用PreviewMouseLeftButtonDown事件并将Handled设置为true

<RadioButton ... PreviewMouseLeftButtonDown="RadioButton_PreviewMouseLeftButtonDown"/>

并在代码中

private void RadioButton_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    e.Handled = true;
    var radioButton = sender as RadioButton;
    MessageBoxResult result = MessageBox.Show("Choosing this sample will override any changes you've made. Continue?", "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Question);
    if (result == MessageBoxResult.Yes)
    {
        radioButton.IsChecked = true;
    }
}