如何访问另一页中的变量

时间:2016-12-04 23:56:50

标签: c# xaml uwp

所以我在使用C#的UWP Windows 10应用程序中有这个页面:

public sealed partial class MainPage : Page

此页面包含一个名为tbPageTitle的文本块。

我想将tbPageTitle的文字更改为" bla"从另一个页面,所以我使用以下代码:

MainPage.tbPageTitle.text = "bla";

但是,我收到以下错误:

  

CS0120非静态字段,方法或属性需要对象引用' MainPage.tbPageTitle'

我不知道该怎么做。我觉得我已经阅读过每一个Google结果。 我找到了一些结果来创建一个类的新实例,例如:

MainPage mp = new MainPage();
mp.tbPageTitle.text = "bla";

但是不会创建一个全新的MainPage吗?顺便说一句,这也不起作用......

1 个答案:

答案 0 :(得分:2)

根据Sandy评论的答案,您在Frame中有一个内部MainPage元素,您可以在其中加载其他页面。因此,获取当前MainPage实例的最简单方法如下:

MainPage mainPage = (Window.Current.Content as Frame).Content as MainPage;

请注意,如果您在MainPage之外导航并在此处调用此行,则显然会失败。另请注意,您在XAML中创建的对象是公共的,这意味着您无论如何也无法访问tbPageTitle元素,但需要创建任何类型的包装器属性在你的MainPage中这样:

public string PageTitle {
    get { return tbPageTitle.Text; }
    set { tbPageTitle.Text = value; }
}

然而正如HeySatan所提到的,这不是您在这里创建的最漂亮的代码设计。也许你可以创建一个方法来转到特定的框架,类似的东西:

public enum TabContent { Home, Replies, Messages, Settings }

public void OpenTab(TabContent content) {
    // Set Page title and navigate
    switch (content) {
        case TabContent.Home:
            tbPageTitle.Text = "Home";        
            InnerFrame.Navigate(typeof(HomePage));
            break;
        case TabContent.Replies:
            tbPageTitle.Text = "Replies";        
            InnerFrame.Navigate(typeof(RepliesPage));
            break;
        case TabContent.Messages:
            tbPageTitle.Text = "Messages";        
            InnerFrame.Navigate(typeof(MessagesPage));
            break;
        case TabContent.Settings:
            tbPageTitle.Text = "Settings";        
            InnerFrame.Navigate(typeof(SettingsPage));
            break;
    }
}

此方法的主要目标是,如果HomePage中有一个按钮设置,则只调用以下行,并且所有导航的逻辑都保留在{{1 }和MainPage只有与自身相关的逻辑:

HomePage

如果您不想一直访问Window.Current.Content,您还可以在// In HomePage: MainPage mainPage = (Window.Current.Content as Frame).Content as MainPage; mainPage.OpenTab(TabContent.Settings); 类中声明一个静态方法,并使访问更简单:

MainPage