none
如何在子页面中运行上级页面的方法 RRS feed

  • 问题

  • 大家好:

    主页面命名空间和子页面一致,但类型名不同

    主页面


    namespace DataPortal.Statistic
    {
        public partial class MainPage : UserControl
        {


    子页面:

    namespace DataPortal.Statistic
    {
        public partial class FMenu : UserControl
        {


    现在

      主页面里动态加载了一个子页面
                FMenu feMenu = new FMenu();
                this.tMenu.Children.Add(feMenu );

    运行后希望在 子页面中能调用 主页面里的一个方法,该如何实现

    谢谢



    2009年12月17日 3:51

答案

  • 方法是类似的,在子窗体中声明一个父窗体类型的成员变量parentWin, 通过parentWin.TheMethod() 不就可以在子窗体中调用了吗
    2009年12月17日 5:29
  • 主页面


    namespace DataPortal.Statistic
    {
        public partial class MainPage : UserControl
        {
           public void Method()
           {
              //
           }

    子页面:

    namespace DataPortal.Statistic
    {
        public partial class FMenu : UserControl
        {
          private MainPage mainPage;
          public FMenu(MainPage mainpage)
          {
                this.mainPage=mainpage;
          }
          //事件调用也行
          public void Test()
          {
               mainPage.Method();
          }   
    主页面里动态加载了一个子页面
                FMenu feMenu = new FMenu(this);
                this.tMenu.Children.Add(feMenu );
    2009年12月17日 7:17
  • 你好,

          按照我的理解,你将一个usercontrol作为menu来使用,希望在这个menu中调用主页面的方法.
       
          你可以这样来调用
      
         ((MainPage)App.Current.RootVisual).InvokeMethod  
         
         也可以使用VisualTreeHelper 向上取到MainPage的 reference .
      
         当然从构造函数传也可以
    2009年12月22日 4:35

全部回复

  • Silverlight 编程其实就象Windows Form编程,只不过针对的framework不同而已。你的问题是一个常见的Windows Form编程问题,解决方法是在父窗体中声明一个子窗体类型的成员变量 例如childWin,子窗体的方法修饰为public,那么你就可以通过这个成员变量childWin调用那个方法了
    2009年12月17日 4:52
  • Silverlight 编程其实就象Windows Form编程,只不过针对的framework不同而已。你的问题是一个常见的Windows Form编程问题,解决方法是在父窗体中声明一个子窗体类型的成员变量 例如childWin,子窗体的方法修饰为public,那么你就可以通过这个成员变量childWin调用那个方法了
    抱歉,我是希望在子窗体内调用父窗体的方法,谢谢
    2009年12月17日 5:14
  • 方法是类似的,在子窗体中声明一个父窗体类型的成员变量parentWin, 通过parentWin.TheMethod() 不就可以在子窗体中调用了吗
    2009年12月17日 5:29
  • 恩,楼上说得差不多。子页面的构造函数中加个参数把父页面传进来即可。
    2009年12月17日 7:13
  • 主页面


    namespace DataPortal.Statistic
    {
        public partial class MainPage : UserControl
        {
           public void Method()
           {
              //
           }

    子页面:

    namespace DataPortal.Statistic
    {
        public partial class FMenu : UserControl
        {
          private MainPage mainPage;
          public FMenu(MainPage mainpage)
          {
                this.mainPage=mainpage;
          }
          //事件调用也行
          public void Test()
          {
               mainPage.Method();
          }   
    主页面里动态加载了一个子页面
                FMenu feMenu = new FMenu(this);
                this.tMenu.Children.Add(feMenu );
    2009年12月17日 7:17
  • 你好,

          按照我的理解,你将一个usercontrol作为menu来使用,希望在这个menu中调用主页面的方法.
       
          你可以这样来调用
      
         ((MainPage)App.Current.RootVisual).InvokeMethod  
         
         也可以使用VisualTreeHelper 向上取到MainPage的 reference .
      
         当然从构造函数传也可以
    2009年12月22日 4:35