【问题标题】:WPF - Stop radio button click with message boxWPF - 停止单选按钮单击消息框
【发布时间】:2016-03-22 19:31:58
【问题描述】:

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

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

我可以捕捉到点击事件并显示一个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;
  }
}

在方法的第二行之后并且在返回用户的选择之前是属性更新的时间。

【问题讨论】:

  • 你说的基础属性还是改变了,触发了数据改变是什么意思?我不明白显示消息框时会触发什么。
  • 数据加载和消息框同时显示,不给用户时间响应
  • 你的意思是RadioButton在消息框出现之前打勾了吗?
  • 是的,这就是为什么我想知道 Click 事件是否是要使用的正确事件。

标签: c# wpf xaml


【解决方案1】:

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;
    }
}

【讨论】:

  • 修复了它。不知道预览活动,谢谢!
  • 阅读有关路由事件的更多信息并查看this 链接以查看执行路由事件的顺序(和方向)
猜你喜欢
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-25
  • 1970-01-01
  • 2012-12-10
相关资源
最近更新 更多