无法从静态方法

时间:2017-08-01 23:34:02

标签: c# wpf navigation

我使公共静态函数可以从另一个窗口访问我的主窗口控件(比如像工具箱这样的东西) 我添加了这个方法:

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());

        }

通过这样做没有发生任何事情,但是一个新的错误:

  

类型&#39; System.NotImplementedException&#39;的第一次机会异常。   发生在System.dll

2 个答案:

答案 0 :(得分:0)

这就是你需要的......

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

一般来说,以这种方式访问​​方法被认为是不好的形式......但每个人都这样做。

答案 1 :(得分:0)

事实上我应该改变我的问题标题但是,让我们暂时接受它。 为了访问主窗口控件,我们应该获得现有的主窗口类。但由于我无法理解的原因,这样的一些事情对我没有用处:

(Application.Current.MainWindow as MainWindow)

但这很有效,我的答案就是:

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

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