首页 文章

如何将Xamarin.Forms WebView对象转换为特定于平台的WebView对象?

提问于
浏览
0

我有一个在Xamarin.Forms中创建的WebView对象:

WebView webView = new WebView {
            HorizontalOptions = LayoutOptions.FillAndExpand,
            VerticalOptions = LayoutOptions.FillAndExpand
        };

我需要对这个对象做一些特定于平台的操作:调用Xamarin.Forms中不可用的一些函数,因为它们在不同平台上具有不同的性质 .

问题是,当我传递Xamarin.Forms对象时:

public interface IWebViewCallCSharp
{
    void passWebView(WebView webView);
}

我可以在_1075081上完成与Xamarin.Forms完全相同的事情 . 如何在每个平台上获得WebView的一些特定于平台的功能?如何将this转换为this

1 回答

  • 1

    您需要实现一个所谓的自定义渲染器 . 从这里开始:Implementing a HybridWebView .

    总之,您需要:

    • 创建HybridWebView自定义控件 .

    • 从Xamarin.Forms中使用HybridWebView .

    • 在每个平台上为HybridWebView创建自定义渲染器 .

    在最后一步中你需要

    • 创建呈现自定义控件的ViewRenderer类的子类 . 第一个类型参数应该是渲染器用于的自定义控件,在本例中为HybridWebView . 第二个类型参数应该是将实现自定义视图的本机控件 .

    • 重写OnElementChanged方法,该方法呈现自定义控件并编写逻辑以对其进行自定义 . 创建相应的Xamarin.Forms自定义控件时,将调用此方法 .

    • 将ExportRenderer属性添加到自定义渲染器类,以指定它将用于呈现Xamarin.Forms自定义控件 . 此属性用于向Xamarin.Forms注册自定义渲染器 .


    您开始使用本机控件的起点是 OnElementChanged 覆盖 .

    protected override void OnElementChanged (ElementChangedEventArgs<NativeListView> e)
    {
      base.OnElementChanged (e);
    
      if (Control == null) {
        // Instantiate the native control and assign it to the Control property
      }
    
      if (e.OldElement != null) {
        // Unsubscribe from event handlers and cleanup any resources
      }
    
      if (e.NewElement != null) {
        // Configure the control and subscribe to event handlers
      }
    }
    

相关问题