Небольшая справочная информация
Я изучаю Xamarin.Forms и в настоящее время немного борюсь с динамическим связыванием моего XAML ContentPage
с моим кодом.Очевидно, я полностью осознаю, как следует писать Xamarin.Form, поэтому я надеюсь, что вы можете потерять сознание из-за моего небольшого замешательства.
Я занимаюсь разработкой мобильного приложения для Android и использую BottomNavigationBarXF , чтобы поместить панель навигации внизу, которая работает хорошо.В настоящее время я использую пример проекта для моего обучения.
Актуальная проблема
Я создал серию ContentPage
, которые я хотел бы динамическипара при создании каждой новой страницы.У моих ContentPage
есть соответствующий код, который я оставил нетронутым;Например, у меня есть ContentPage
с именем HomePage
, у которого есть этот код:
namespace BottomBarXFExample
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class HomePage : ContentPage
{
public HomePage()
{
InitializeComponent();
}
}
}
и соответствующий ему XAML:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="BottomBarXFExample.HomePage">
<ContentPage.Content>
<StackLayout>
<Label Text="Welcome to Xamarin.Forms!"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand" />
</StackLayout>
</ContentPage.Content>
Я создаю страницы следующим образом.
string[] tabTitles = { "Me", "Trends", "Home", "Plan", "About" };
ContentPage[] pages = new ContentPage[tabTitles.Length];
for (int i = 0; i < tabTitles.Length; ++i)
{
ContentPage page = createPage(tabTitles[i]);
bottomBarPage.Children.Add(page);
}
Метод createPage
:
private ContentPage createPage(String title)
{
FileImageSource icon = setIcon(title);
ContentPage page = new ContentPage()
{
Title = title,
Icon = icon,
};
// should something happen here with the XAML?
return page;
}
И метод setIcon
:
private FileImageSource setIcon(String title)
{
FileImageSource icon = (FileImageSource)FileImageSource.FromFile(
string.Format(
"ic_" + title.ToLowerInvariant() + ".png",
title.ToLowerInvariant()
));
return icon;
}
Используя этот подход, я успешно создал нижнюю панель навигации.Однако при переходе на каждую страницу с помощью панели навигации представление «очевидно» пусто, поскольку я не связываю ContentPage
с соответствующим XAML.Можно ли это сделать в коде?
Если я выберу для каждого экземпляра ContentPage
«правильный» путь:
HomePage homePage = new HomePage()
{
Title = "Home",
Icon = homeIcon
};
А затем добавьте их на панель навигации следующим образом:
bottomBarPage.Children.Add(homePage)
Я получаю связь между XAML и кодом.Тем не менее, я нахожу это довольно утомительным, и, вероятно, также ненужным, чтобы сделать это таким образом.
Есть предложения?
Спасибо,
Крис