C#UWP - 如何从另一个页面访问页面控件?

时间:2018-01-08 12:28:04

标签: c# xaml uwp

是否有办法从其他页面访问页面控件。我在 MainPage 中有一些控件,我想从包含列表视图的其他页面访问主页控件 TitleTextBlock 。我想在选择listview项目时更改 Mainpage TitleTextBlock.Text

我也试过,但TitleTextBlock.Text值不会改变。那有什么办法吗?

MainPage.xaml.cs中

public void ChangeTitle(string title)
{
   TitleTextBlock.Text = title;
   BackButton.Visibility = Visibility.Visible;
}

ContentPage.xaml.cs

private void ListView_ItemClick(object sender, ItemClickEventArgs e)
{
   var link = (Link)e.ClickedItem;
   this.Frame.Navigate(typeof(WebViewPage), link);

   MainPage p = new MainPage();
   p.ChangeTitle(link.Title);
}

更新 我解决了这个问题,几乎没有变化 的 MainPage.xaml.cs中

 public static TextBlock HeaderTitleTextBlock { get; set; }
 public static Button HeaderBackButton { get; set; }

 public MainPage()
   {
      this.InitializeComponent();
      HeaderTitleTextBlock = TitleTextBlock;
      HeaderBackButton = BackButton;

   }

ContentPage.xaml.cs

MainPage.HeaderTitleTextBlock.Text = link.Title;
MainPage.HeaderBackButton.Visibility = Visibility.Visible;

2 个答案:

答案 0 :(得分:7)

您还可以使用public属性将控件显示为x:FieldModifier(这是WPF的默认行为):

<TextBlock x:FieldModifier="public" x:Name="MyTextBlock" />

这将使控件公开,并且可以从其他类访问它。

我写了一篇简短的博文:http://blog.mzikmund.com/2017/06/modifying-xaml-field-visibility/

答案 1 :(得分:0)

我用过的东西:

Frame contentFrame = Window.Current.Content as Frame;
MainPage mp =  contentFrame.Content as MainPage;
Grid grid = mp.Content as Grid;
TextBlock my_textblock = grid.FindName("my_textblock") as TextBlock;

my_textblock.Text = "Edited the TextBlock";

当然,层次结构Frame> Page> Grid> TextBlock是我在UWP应用程序中使用的层次结构。 希望这可以帮助。