2016-03-22 13 views
1

私は、クリックすると大量のテキストボックスにデータを埋め込む、動的に生成されるラジオボタンを用意しました。それらは、ラジオボタンのラベルテキストに基づいてサービスからデータをプルするビューモデルのプロパティにバインドされています。WPF - ラジオボタンをクリックしてメッセージボックスを閉じる

ラジオボタンがクリックされたときにMessageBoxを表示すると、誤って(または意図的に)別のラジオボタンがクリックされた場合、自分がしたいことを確認できます。

私はクリックイベントをキャッチしてMessageBoxを表示できますが、基になるプロパティは変更されて、データ変更がトリガーされます。 MessageBoxが表示されている間に実行を停止できる方法はありますか? Clickイベントを間違ったイベントとして使用しますか?私はWPFの初心者です。

ラジオボタンのクリックイベント:メソッドの2行目の後

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

Handledを設定した後にイベントが発生したが変更されましたとにかく、データの変更をトリガする?メッセージボックスが表示されているときに何が引き起こされるのか分かりません。 – dkozl

+0

データが読み込まれ、同時にメッセージボックスが表示され、ユーザーに応答する時間が与えられない – JB06

+0

メッセージボックスが表示される前に 'RadioButton'が選択されていることを意味しますか? – dkozl

答えて

2

Clickあなたが財産を_underlyingとはどういう意味ですかRadioButtonが既に確認されていますが、代わりにPreviewMouseLeftButtonDownイベントを使用することができ、真の

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

それはそれを修正しました。プレビューイベントについて知りませんでした、ありがとう! – JB06

+0

ルーティングイベントの詳細を確認し、[this](https://msdn.microsoft.com/library/ms742806(v = vs.100).aspx#how_event_processing_works)のリンクをクリックして、ルーティングイベントの順序(および方向)を確認します実行される – dkozl

関連する問題