在我的Xamarin.Forms PCL项目中实现FlyoutNavigation

时间:2018-01-11 12:03:06

标签: c# ios xamarin xamarin.forms xamarin.ios

我一直在搜索如何在我的Xamarin.Forms PCL项目中实现这个IOS平台特定的UI组件(https://components.xamarin.com/view/flyoutnavigation),但我无法理解这是如何实现的。

我遇到了多个" Buzz-Words"我可能会使用它,但我仍然太新,无法完全理解 的意思,如何我将能够使用它们:

  1. 自定义渲染器: 有了这个,我明白可以自定义Xamarin.Forms中可用的组件并创建导出程序集以便" push"平台特定代码从各自的平台到这些组件。

  2. 依赖注入: 有了这个,我明白可以创建类,并在这些类的构造函数方法中,传递允许我们合并特定于平台的代码的对象。 (怎么样?我不知道......)

  3. Xamarin.Forms DependencyService: 有了这个,我明白我们可以以某种方式集成来自共享代码的平台特定代码(来自可移植库类)

  4. 拜托,我的知识有很多空白,而且我很难理解,但我无法绕过它!

    提前感谢您的帮助。

2 个答案:

答案 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);
                }
        }

This is how your flyout will look like:

答案 1 :(得分:0)