Динамически обновляемое содержимое Xamarin.Forms ContentPage не реагирует на действия пользователя для платформы iOS - PullRequest
1 голос
/ 14 июля 2020

В моем проекте Xamarin.Forms , ориентированном на обе платформы iOS и Android, я пытаюсь изменить Content из a ContentPage динамически следующим образом:

var currentPage = Application.Current.MainPage.Navigation.NavigationStack.LastOrDefault();
var oldContent = ((ContentPage)currentPage).Content;
var testLabel = new Label { Text = "Hello" };
var newContent = new Grid { Children = {oldContent, testLabel } };
((ContentPage)currentPage).Content = newContent;

Это приведет к успешному отображению testLabel поверх oldContent.

In Android платформа, я все еще могу взаимодействовать с дочерними элементами (Buttons, ListView ... et c) в представлении oldContent. Но в iOS дочерние элементы oldContent view на данном этапе не интерактивны.

Я также убедился, что testLabel не блокирует oldContent . Вот как я убедился, что он не блокируется,

var currentPage = Application.Current.MainPage.Navigation.NavigationStack.LastOrDefault();
var oldContent = ((ContentPage)currentPage).Content;
var newContent = new Grid { Children = { oldContent } };
((ContentPage)currentPage).Content = newContent;

и для этой настройки, это только для Android платформы, с которой я могу взаимодействовать с oldContent дочерними элементами . Но для платформы iOS я не могу взаимодействовать с дочерними элементами oldContent.

Также, когда я устанавливаю oldContent обратно как Content из ContentPage, тогда я может взаимодействовать с элементами oldContent. В том же потоке приложения.

((ContentPage)currentPage).Content = oldContent;

Это позволяет мне взаимодействовать с oldContent дочерними элементами для Android и iOS платформ.

Кто-нибудь знает, как я могу сделать oldContent по-прежнему интерактивным для iOS платформы после динамического изменения Content ContentPage .

1 Ответ

0 голосов
/ 14 июля 2020

Мне просто удалось этого добиться,

Я попытался создать newContent как пустой Element. Затем замените Content в ContentPage на newContent. Затем добавьте соответствующие дочерние элементы в newContent, как показано ниже.

var newContent = new Grid ();
((ContentPage)currentPage).Content = newContent;
newContent.Children.Add(oldContent);
newContent.Children.Add(testLabel);

и bin go !!! это сработало

...