2012-06-26 16 views
7

私はいくつかのボタンを持つユーザーコントロールを使用しています。ユーザーコントロールには、使用するクラスによって異なる操作を行う必要があります。WPFユーザーコントロールのイベントの処理

最終的なアプリケーションからユーザーコントロールを使用するときに、どのハンドラーがどのイベントを処理するかを指定するためのボタンに直接アクセスできないため、これらのハンドラーを実装する方法がわかりません。

どうすればよいですか?

答えて

16

これを実行する別の方法は、ユーザーコントロールのイベントでイベントを公開することです:

public partial class UserControl1 : UserControl 
{ 
    public UserControl1() 
    { 
     InitializeComponent(); 
    } 


    public event RoutedEventHandler Button1Click; 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     if (Button1Click != null) Button1Click(sender, e);  
    } 
} 

これはユーザーコントロールコントロール内でそのボタンにフックしButton1Clickイベントを提供します。

+0

ありがとうございました。これらは素晴らしいソリューションのようです。それ以上の選択肢はありますか? –

4

ボタンごとにコマンドを作成し、各「ハンドラ」に対して委任します。デリゲートをユーザ(最終アプリ)に公開し、内部的にコマンドのExecute()メソッドで呼び出すことができます。このようなもの:

public class MyControl : UserControl { 
     public ICommand FirstButtonCommand { 
      get; 
      set; 
     } 
     public ICommand SecondButtonCommand { 
      get; 
      set; 
     } 
     public Action OnExecuteFirst { 
      get; 
      set; 
     } 
     public Action OnExecuteSecond { 
      get; 
      set; 
     } 

     public MyControl() { 
      FirstButtonCommand = new MyCommand(OnExecuteFirst); 
      FirstButtonCommand = new MyCommand(OnExecuteSecond); 
     } 
    } 

"MyCommand"は、ICommandを実装する必要があります。また、対応するボタンにコマンドをバインドする必要があります。お役に立てれば。