我有一组动态生成的单选按钮,单击它们时,会填充大量带有数据的文本框。它们绑定到视图模型上的属性,该属性根据单选按钮的标签文本从服务中提取数据。
我想要做的是在单击单选按钮时显示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;
}
}
在方法的第二行之后和返回用户选择之前,无论如何都要更新属性。
答案 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;
}
}