我一直在搜索如何在我的Xamarin.Forms PCL项目中实现这个IOS平台特定的UI组件(https://components.xamarin.com/view/flyoutnavigation),但我无法理解这是如何实现的。
我遇到了多个" Buzz-Words"我可能会使用它,但我仍然太新,无法完全理解 的意思,如何我将能够使用它们:
自定义渲染器: 有了这个,我明白可以自定义Xamarin.Forms中可用的组件并创建导出程序集以便" push"平台特定代码从各自的平台到这些组件。
依赖注入: 有了这个,我明白可以创建类,并在这些类的构造函数方法中,传递允许我们合并特定于平台的代码的对象。 (怎么样?我不知道......)
Xamarin.Forms DependencyService: 有了这个,我明白我们可以以某种方式集成来自共享代码的平台特定代码(来自可移植库类)
拜托,我的知识有很多空白,而且我很难理解,但我无法绕过它!
提前感谢您的帮助。
答案 0 :(得分:1)
首先使用.cs创建一个xaml页面,并将名称命名为" MenuMasterPage" xaml代码
<?xml version="1.0" encoding="UTF-8"?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="TestAppForms.Pages.MenuMasterPage">
<MasterDetailPage.Master>
<ContentPage Icon="hamburger_menu.png" Title="Daily Expense" BackgroundColor="#000000"> <!-- Menu Title background color -->
<StackLayout VerticalOptions="FillAndExpand">
<ListView x:Name="MenuListView" ItemsSource="{Binding MainMenuItems}" ItemSelected="MainMenuItem_Selected" VerticalOptions="FillAndExpand" SeparatorVisibility="None" BackgroundColor="#f5f5f5"> <!-- Menu background color -->
<ListView.ItemTemplate>
<DataTemplate>
<ImageCell Text="{Binding Title}" ImageSource="{Binding Icon}" TextColor="Black"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>
</MasterDetailPage.Master>
</MasterDetailPage>
MenuMasterPage.cs代码
public partial class MenuMasterPage : MasterDetailPage
{
public List<MainMenuItem> MainMenuItems { get; set; }
public MenuMasterPage()
{
// Set the binding context to this code behind.
BindingContext = this;
// Build the Menu
MainMenuItems = new List<MainMenuItem>()
{
new MainMenuItem() { Title = "Add Daily Expense", Icon = "menu_inbox.png", TargetType = typeof(Page1) },
new MainMenuItem() { Title = "My Expenses", Icon = "menu_stock.png", TargetType = typeof(Page2) }
};
// Set the default page, this is the "home" page.
Detail = new NavigationPage(new Page1());
InitializeComponent();
}
// When a MenuItem is selected.
public void MainMenuItem_Selected(object sender, SelectedItemChangedEventArgs e)
{
var item = e.SelectedItem as MainMenuItem;
if (item != null)
{
if (item.Title.Equals("Add Daily"))
{
Detail = new NavigationPage(new AddDailyExpensePage());
}
else if (item.Title.Equals("My Expenses"))
{
Detail = new NavigationPage(new MyExpensesPage());
}
MenuListView.SelectedItem = null;
IsPresented = false;
}
}
}
public class MainMenuItem
{
public string Title { get; set; }
public Type TargetType { get; set; }
public string Icon { get; set; }
}
在App.xaml.cs中用此
替换代码public App()
{
InitializeComponent();
{
MainPage = new MenuMasterPage();
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
答案 1 :(得分:0)
您可以使用Forms MasterDetail页面吗? https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/navigation/master-detail-page/