Невозможно получить доступ и повторно использовать элементы управления с другой страницы - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь использовать страницу для доступа к некоторым элементам управления на другой странице, но по какой-то причине она не работает, несмотря на установку необходимых ссылок на другую страницу? Есть идеи, почему это не работает и как это можно исправить?

Ожидаемый результат:

Откройте приложение> MainList> щелкните элемент списка> go на PageSunflower > PageSunflower должен отображать элементы управления файла PageTest.xaml

Текущий результат:

Ошибка - ссылка на объект не установлена ​​на экземпляр объекта

MainList.xaml.cs

public sealed partial class MainList : Page
 {
     public List<ListItem> listItemMains;

     public MainList ()
     {
         this.InitializeComponent();

         listItemMains = ItemManagerMains.GetListItems();
     }

     private void ListMain_ItemClick(object sender, ItemClickEventArgs e)
     {
         ListItemMain item = (ListItemMain)e.ClickedItem;

         if (item.FlowerName == "Sunflower")
         {
             Frame.Navigate(typeof(PageSunflower));
         }
         else
         {
             Frame.Navigate(typeof(PageDaffodil));
         }
     }
 }

PageSunflower.xaml

 <Page [...]>
     <Grid>

     </Grid>
 </Page>

PageSunflower.xaml .cs

 public sealed partial class PageSunflower : Page
 {
     public PageSunflower()
     {
         this.InitializeComponent();

         TabView tabview = PageTest.Current.MyTabs;

         TextBlock txtTitle = PageTest.Current.txtPageTitle;
         txtTitle.Text = "hello";
     }
 }

PageTest.xaml

 <Page [...]>
     <Grid>
         <Grid.RowDefinitions>
             <RowDefinition Height="Auto"/>
             <RowDefinition Height="*"/>
         </Grid.RowDefinitions>
         <StackPanel Grid.Row="0">
             <TextBlock x:Name="txtTitle" x:FieldModifier="public"/>

         <controls:TabView x:FieldModifier="public" Grid.Row="1" x:Name="MyTabs"/>
     </Grid>
 </Page>

PageTest.xaml.cs

 public sealed partial class PageTest : Page
 {
     public PageTest()
     {
         this.InitializeComponent();

         Current = this;
     }

     public static PageTest Current;
 }

1 Ответ

0 голосов
/ 19 июня 2020

Если вы хотите получить контроль над другой страницей с помощью переменных c stati, вам потребуются два условия:

  1. Эта страница уже загружена.
  2. Страница загружена. cached.

Поскольку элементы управления на странице вызываются, элементы управления на странице будут созданы только после загрузки страницы.

Кроме того, когда страница не является содержимого текущего Frame, страница может быть выгружена, и ссылка будет освобождена в это время, элемент управления не может быть получен, поэтому страницу следует кэшировать.

Итак, если вы хотите получить элементы управления на странице, убедитесь, что страница была загружена (то есть после перехода на страницу), а затем кешируйте страницу, например:

public PageTest()
{
    this.InitializeComponent();
    NavigationCacheMode = NavigationCacheMode.Enabled;
    Current = this;
}

Спасибо.

...