【问题标题】:C# UWP - How to access page controls from another page?C# UWP - 如何从另一个页面访问页面控件?
【发布时间】:2018-01-08 12:28:04
【问题描述】:

有没有办法从另一个页面访问页面控件。我的 MainPage 中有一些控件,我想从另一个包含列表视图的页面访问 Mainpage Controls TitleTextBlock。我想在选择列表视图项目时更改 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;

【问题讨论】:

  • 您没有在现有窗口上工作,即您正在创建 MainPage 的新实例并对其进行操作,这不会影响当前打开的 MainPage,您必须传递已经实例化的 MainPage 的引用并对其进行操作。
  • 考虑使用view model
  • 您能详细说明一下吗? - sashikant_
  • WPF 和它的后续 UWP 是专门为考虑到 MVVM 模式而设计的。虽然您可以应用较旧的技术,但它们会丢失大约 90% 的能力。如果您使用 MVVM,则不存在问题:您当前显示的视图模型的哪一部分不会改变整个事物都在内存中。如果您需要对该模式进行简短介绍,几年前我写了一些东西:social.msdn.microsoft.com/Forums/vstudio/en-US/…

标签: c# xaml uwp


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    我用过的东西:

    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 应用程序中使用的层次结构。 希望这可以帮助。

    【讨论】:

    • 这不如使用字段/或属性方便,因为查找名称较慢,并且一旦更改层次结构就会中断
    • 我在回答中使用的那个,甚至更好——创建一个只读属性,提供对命名字段的访问(这样外部用户就无法篡改它)。
    猜你喜欢
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 2015-01-16
    相关资源
    最近更新 更多