【问题标题】:Can't Access to a control in main window from static method无法从静态方法访问主窗口中的控件
【发布时间】:2017-08-01 23:34:02
【问题描述】:

我公开静态函数以从另一个窗口访问我的主窗口控件(比如说工具箱之类的东西) 我添加了这个方法:

public static void GoToLibraryPage()
{

    MainFrame.NavigationService.Navigate(new Library_Pg());
}

我在同一个窗口中有一个名为 MainFrame 的控件(框架):

 <Grid>
        <Frame x:FieldModifier="Public"  x:Name="MainFrame" NavigationUIVisibility="Hidden" />
    </Grid>

错误是:

非静态字段所需的对象实例

这看起来很有趣,但我想我不知道基础知识。如何访问它?

更新: 我制作了一个这样的主窗口实例:

  public static void GoToLibraryPage()
        {

            MainWindow mmm= new MainWindow();
           mmm.MainFrame.NavigationService.Navigate(new Library_Pg());

        }

这样做什么都没有发生,只是出现了一个新错误:

“System.NotImplementedException”类型的第一次机会异常 发生在 System.dll 中

【问题讨论】:

  • 了解课程。您需要一个窗口实例。
  • 好的,谢谢。这有帮助。
  • 第一次机会异常只有在不处理时才会成为问题。
  • 您需要获取现有实例。
  • Application.Current.MainWindow 是一个Window;你不需要那个。

标签: c# wpf navigation


【解决方案1】:

这就是你需要的……

(Application.Current.MainWindow as MainWindow).MainFrame.NavigationService.Navigate(new Library_Pg());

通常以这种方式访问​​方法被认为是不好的形式……但每个人都这样做。

【讨论】:

    【解决方案2】:

    事实上,我应该更改我的问题标题,但是,让我们暂时接受它。 为了访问主窗口控件,我们应该获取现有的主窗口类。但是出于我无法理解的原因,有些事情对我不起作用:

    (Application.Current.MainWindow as MainWindow)
    

    但这有效,我的答案是:

     MainWindow ExistingInstanceOfMainWindow= Window.GetWindow(Application.Current.MainWindow) as MainWindow;
    

    如果有人可以解释原因,请随时将您的知识添加到答案中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      相关资源
      最近更新 更多