-1

我已经关注了这个问题并尝试构建我的解决方案。问题是“UserControlButtonClicked”似乎为空!因此,if 中的“UserControlButtonClicked(this, EventArgs.Empty)”不会运行,并且父页面中的方法“addStepContent”永远不会被调用。

用户控件“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

这假设您想要使用现有的委托而不是自己创建委托,并且您没有通过事件参数传递任何特定于父页面的内容。

在用户控件的代码隐藏中(如果不使用代码隐藏或 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 回答
-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 回答