如何使用依赖注入在 Xamarin.Forms 中实现 Flyoutnavigation

Posted

技术标签:

【中文标题】如何使用依赖注入在 Xamarin.Forms 中实现 Flyoutnavigation【英文标题】:How to use Dependency Injection to implement Flyoutnavigation in Xamarin.Forms 【发布时间】:2018-07-04 02:36:04 【问题描述】:

我将如何使用依赖注入来为我的 ios 项目使用 Flyoutnavigation。

我决定坚持使用 android 的默认 MasterDetailPage,因为它看起来不像 iOS 那样糟糕。

这是我到目前为止所做的:

在 PCL 中

IMainPage.cs:

public interface IMainPage

    Page GetMainPage();

App.cs:

public partial class App : Application

    public App()
    
        MainPage = DependencyService.Get<IMainPage>().GetMainPage();
    

    protected override void OnStart()
    
        // Handle when your app starts
    

    protected override void OnSleep()
    
        // Handle when your app sleeps
    

    protected override void OnResume()
    
        // Handle when your app resumes
    

在 Android 中

MainPage_Android.cs:

[assembly: Xamarin.Forms.Dependency(typeof(MainPage_Android))]
namespace ProjectName.Droid

    public class MainPage_Android : MasterDetailPage, IMainPage
    
        private NavigationPage detail;
        private MasterPage master;

        public Page GetMainPage()
        
            MasterDetailPage mdp = new MasterDetailPage();

            //Master
            master = new MasterPage();
            MasterBehavior = MasterBehavior.Popover;
            mdp.Master = master;

            //Detail
            detail = new NavigationPage(new Home())
            
                BarBackgroundColor = Color.FromHex("#01A0E1"),
                BarTextColor = Color.White
            ;
            mdp.Detail = detail;

            return mdp;
        
    

在 iOS 中

我卡在这里了。如何使用 Flyoutnavigation 返回页面?

【问题讨论】:

【参考方案1】:

如果您想在 Android 上使用默认样式,在 iOS 上使用自定义样式,您可以尝试在 iOS 上为 MasterDetailPage 制作自定义渲染器。然后嵌入您的Flyoutnavigation

这是我的 iPad 渲染器:

[assembly: ExportRenderer(typeof(MainPage), typeof(MainPageRenderer))]
namespace FlyoutNavigationDemo.iOS

    public class MainPageRenderer : TabletMasterDetailRenderer
     
         //put your Flyoutnavigation's code here
    

由于Flyoutnavigation 的代码太多。我给你做了一个小样,你可以参考here了解更多详情。

【讨论】:

您好,感谢您的回复。但是,当我加载并编译您的项目时,出现以下错误: 1. 元数据文件 'D:\New folder (2)\FlyoutNavigationDemo-master\FlyoutNavigationDemo\FlyoutNavigationDemo\bin\Debug\netstandard2.0\FlyoutNavigationDemo.dll' 不能可以找到 FlyoutNavigationDemo.iOS 以及 2。“属性”类型是在未引用的程序集中定义的。您必须添加对程序集“System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”的引用。 FlyoutNavigationDemo @Bracefor 请尝试删除 bin 和 obj 文件夹,然后再次运行。 好的,我应该从每个项目中删除所有 bin 和 obj 文件夹吗? @Bracefor 是的,你可以试试。 我修好了!我所要做的就是将目标框架改回 .NET Standard 1.6。

以上是关于如何使用依赖注入在 Xamarin.Forms 中实现 Flyoutnavigation的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms Shell 如何在路由导航中向字符串注入多个不同的值

如何使用 Xamarin.Forms.DependencyService 注入具有构造函数注入的 ViewModel

如何使用 Xamarin 在 Android 中同步获取 GPS 位置更新?

使用依赖服务从 Xamarin.Forms 应用发送电子邮件

Xamarin.Forms iOS 依赖服务中的触觉反馈崩溃

如何在 xamarin.forms 中获取状态栏高度?