如何使用 Xamarin.Forms 自定义渲染器在 ButtonOnClick() 中执行特定于平台 (Android) 的方法。

How to execute a platform (Android) specific method within a ButtonOnClick() using a Xamarin.Forms custom renderer.

简介:

我从以下代码开始:

https://github.com/xamarin/xamarin-forms-samples/tree/master/CustomRenderers/Entry/Android

研究自定义渲染器。我这样做是因为有些代码只在 android 平台上执行。让我们称之为 "androidMethod()" 并且属于 Android 代码库(不是共享库)。我注意到我发现的大多数示例都使用 customRenderer 进行平台特定的 UI 修改(如 link 中的示例),但我打算不对 UI 进行任何更改,而是我试图在 Xamarin.Forms ButtonOnClick() 方法中放置特定于平台的方法,如下面的代码所示。

下面的代码类似于您在 link 中的 MyEntryRenderer.cs 中找到的代码,但您会看到它被修改为应用于按钮而不是条目。

MyButtonRenderer.cs:

using Xamarin.Forms.Platform.Android;
using Xamarin.Forms;
using CustomRenderer;
using CustomRenderer.Android;
using Android.Content;

[assembly: ExportRenderer(typeof(MyButton), typeof(MyButtonRenderer))]
namespace CustomRenderer.Android
{
    class MyButtonRenderer : ButtonRenderer
    {
        private Button androidButton;

        public MyButtonRenderer(Context context) : base(context)
        {
        }

        protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                //I want to be able to do something like this:
                ButtonOnClick(androidMethod());
            }
        }
    }
}

如何获得 androidMethod();在此上下文中执行。我找到的示例有限,因此请尽量将您的响应限制在与示例兼容的内容上。谢谢!

如果你想执行特定于平台的方法,我会使用 DepenencyService 而不是自定义渲染器