2013-01-16 45 views
-1

我跟着this的问题,并试图构建我的解决方案。问题是'UserControlButtonClicked'显示为空!所以'UserControlButtonClicked(this,EventArgs.Empty)'在if内部,不运行,并且父页面中的方法'addStepContent'永远不会被调用。从UserController调用父页面的方法

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

    } 

回答

-1

已解决。问题出在父页上。

StepsBar stepsBar = new StepsBar(); 

    stepsBar.UserControlAddStepContent += new EventHandler(addStepContent); 

StepsBar的遗感未添加到页面中。 D'OH! 因此,这里是我做了什么:

stepsBar.UserControlAddStepContent += new EventHandler(addStepContent); 

和父页面的XAML:

<local:StepsBar x:Name="stepsBar"/> 
-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 
    } 

} 
+0

正如我在这个问题写了,我用粘贴确切的例子,而是工作:UserControlButtonClicked'显示为空!所以'UserControlButtonClicked(this,EventArgs.Empty)'在if里面,不会运行。 –

+0

我只提供了一个按预期工作的示例,并且可以访问父页上的方法。 –