-1

私はこの質問に従い、ソリューションを構築しようとしました。問題は、「UserControlButtonClicked」がnullのように見えることです。したがって、if内の「UserControlButtonClicked(this、EventArgs.Empty)」は実行されず、親ページの「addStepContent」メソッドは呼び出されません。

UserControl'StepsBar'

public sealed partial class StepsBar : UserControl
    {

        public event EventHandler UserControlAddStepContent;

        [...]

    public StepsBar()
    {
        this.InitializeComponent();
                    Image step_1 = new Image();

        ButtonInfo step_1Info = new ButtonInfo();
        step_1Info.Add((int)stepNumber.one, (int)stepStatus.normal);
        step_1.Tag = step_1Info;

        step_1.Source = setBackground((int)stepStatus.normal);
        step_1.Tapped += stepTapped;

        [...]
    }

public void stepTapped(Object sender, RoutedEventArgs e)
    {
        [...]

        if (step != null)
        {

           [...]

            firePageEvent(); 

        }

    }

    public void firePageEvent() 
    {
        if (UserControlAddStepContent != null)
        {
            UserControlAddStepContent(this, EventArgs.Empty); 
        }
    }

親ページ

public Violation()
    {

        this.InitializeComponent();

        StepsBar stepsBar = new StepsBar();

        stepsBar.UserControlAddStepContent += new EventHandler(addStepContent); 


    }

    private void addStepContent(object sender, EventArgs e) 
    {

        CheckBox check_1 = new CheckBox();
        check_1.Content = "Check me!";
        bodyStackPanel.Children.Add(check_1);

    }
4

2 に答える 2

-1

解決しました。問題は、親ページのこれでした。

StepsBar stepsBar = new StepsBar();

    stepsBar.UserControlAddStepContent += new EventHandler(addStepContent); 

StepsBar のインスタンスがページに追加されませんでした。ドー!だからここに私がしたことがあります:

    stepsBar.UserControlAddStepContent += new EventHandler(addStepContent); 

そして、親ページの xaml で:

<local:StepsBar x:Name="stepsBar"/>
于 2013-01-16T21:05:01.233 に答える
-1

これは、独自のデリゲートを作成するのではなく、既存のデリゲートを使用すること、およびイベント引数によって親ページに固有のものを渡さないことを前提としています。

ユーザー コントロールのコード ビハインド (コード ビハインドまたは C# を使用しない場合は、必要に応じて調整します):

   public partial class MyUserControl : System.Web.UI.UserControl
    {
        public event EventHandler UserControlButtonClicked;


    private void OnUserControlButtonClick()
    {
        if (UserControlButtonClicked != null)
        {
            UserControlButtonClicked(this, EventArgs.Empty);
        }
    }

    protected void TheButton_Click(object sender, EventArgs e)
    {
        // .... do stuff then fire off the event
        OnUserControlButtonClick();
    }

    // .... other code for the user control beyond this point
}

ページ自体で、次のような方法でイベントをサブスクライブします。

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // hook up event handler for exposed user control event
        MyUserControl.UserControlButtonClicked += new  
                    EventHandler(MyUserControl_UserControlButtonClicked);
    }
    private void MyUserControl_UserControlButtonClicked(object sender, EventArgs e)
    {
        // ... do something when event is fired
    }

}
于 2013-01-16T17:20:05.843 に答える