2010-12-05 7 views
2

ボタン、テキストボックス、コンボボックス、チェックボックスなど、さまざまな種類のコントロールを含むユーザーコントロールがあります。何かが変更されたかどうかを追跡するための一般的な方法が必要です。ほとんどの場合、私は詳細を気にしません(つまり、どのテキストボックスが変更されたか知る必要はありません)。私がEventManager.RegisterClassEventを見たとき、私はこれが私の解決策だと思ったが、すぐに私はそれが実現していないことに気づいた。この問題は、それがあまりにも多く発射されたことです。たとえば、同じコントロールにボタンとコンボボックスがある場合、コンボボックスのドロップダウンを押すと、button.clickイベントも発生します。コントロールの「修正済み」を追跡するための邪魔な方法はありますか?

WinFormsでは、私はusercontrolのすべてのコントロールをループし、適切なイベント(TextBox.TextChanged、またはComboBox.SelectedIndexChangedなど)を購読する必要がありましたが、面倒ですが機能します。私はWPFでそれを行うためのより良い、簡単な方法があることを願っています。

答えて

2

ルーティングイベント:

<UserControl x:Class="..." TextBoxBase.TextChanged="UserControl_TextChanged" 
Selector.SelectionChanged="UserControl_SelectionChanged" 
ToggleButton.Checked="UserControl_Checked" 
ButtonBase.Click="UserControl_Click" /> 
+0

を処理するためにUserControl_Clickイベントでe.sourceを検証するために、このチェックを入れてくださいすることができます。問題は、このUserControlでコンボボックスがある場合はxamlを使用して、コンボボックスのドロップダウンボタンをクリックするだけでUserControl_Clickイベントを取得するということです。これをどうやって防ぐのですか?コンボボックスの場合は、実際に選択を変更した後、SelectionChangedイベントを発生させたいだけです。 – newman

+0

ButtonBase.Clickイベントを削除します。別の方法は、ハンドラのOriginalSourceをチェックすることです。たとえば、ボタンに名前を付けて、許可されたボタンとソースの名前を比較することができます。 – vorrtex

0

あなたは私はあなたの答えを理解していないこの

If(e.Source.GetType()==typeof(Button)) 
{ 
    // your code 
} 
関連する問題