所以我在使用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吗?顺便说一句,这也不起作用......
答案 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