9

I have a user control with several buttons, which need to take different actions depending on the class using it.

The problem is that I don't know how to implement those handlers because when using my user control from the final app I don't have direct access to the buttons to specify which handler handles which events.

How would you do that?

4

2 に答える 2

20

これを行う別の方法は、 UserControl のイベントを通じてイベントを公開することです。

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ユーザーコントロールに、コントロール内のそのボタンに接続するイベントが与えられます。

于 2012-06-26T11:12:06.337 に答える
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 を実装する必要があります。コマンドを対応するボタンにバインドする必要もあります。お役に立てれば。

于 2012-06-26T11:05:45.003 に答える