簡體   English   中英

如何將Xamarin.Forms WebView對象轉換為平台特定的WebView對象?

[英]How to convert Xamarin.Forms WebView object to platform-specific WebView object?

我在Xamarin.Forms中創建了一個WebView對象:

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

我需要對該對象執行一些特定於平台的操作:調用Xamarin.Forms中不可用的一些函數,因為此特性在不同平台上不同。

問題是,當我傳遞Xamarin.Forms對象時:

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

我可以在“本機方面”執行與Xamarin.Forms中完全相同的操作。 如何在每個平台上獲得某些特定於平台的WebView功能? 如何轉換這個

您將需要實現一個所謂的自定義渲染器。 從這里開始: 實現HybridWebView

簡而言之,您將需要:

  1. 創建HybridWebView自定義控件。
  2. 使用Xamarin.Forms中的HybridWebView。
  3. 在每個平台上為HybridWebView創建自定義渲染器。

在最后一步中,您需要

  1. 創建用於渲染自定義控件的ViewRenderer類的子類。 第一個類型參數應該是渲染器所針對的自定義控件,在這種情況下為HybridWebView。 第二個類型參數應該是將實現自定義視圖的本機控件。
  2. 重寫呈現自定義控件的OnElementChanged方法並編寫邏輯以對其進行自定義。 創建相應的Xamarin.Forms自定義控件時,將調用此方法。
  3. 向自定義渲染器類添加一個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
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM