記錄 WebView2 的縮放率

webView.ZoomFactor 是畫面縮放率,不過每次變換網址,縮放率會重設,若要記錄下來,則要用一些技巧。

 

底下的方法是在每次調整縮放率時,會觸發 ZoomFactorChanged 事件,因此只要一觸發,就記錄縮放率為 zoom。

 

然後每次新的網址載入完成,就設定新的縮放率為 zoom 即可。

 

不過在實測中有個問題,就是每次更新網址時,新網址一出來就會重設縮放率,此時也會觸發 ZoomFactorChanged ,這時縮放率又回到 1,如此一來,新的網頁完成後,縮放率又會設為 1,等於沒作用。

 

所以在觀察各種網頁載入過程所觸發的事件,發現可以在 NavigationStarting 發生時,設定變數 SetWebViewZoom 為 false。當網頁一開始載入後,縮放率重設,觸發 ZoomFactorChanged ,但在 ZoomFactorChanged 中,會檢查 SetWebViewZoom 若為 false 就不記錄縮放率,因此就不會記錄重設縮放率為 1 的階段。

 

等到 SourceChanged 觸發,就設定新的縮放率,此時新頁就會縮放至先前的設定了。

 

再等到 NavigationCompleted 觸發時,再將 SetWebViewZoom 設為 true,之後只要再調整縮放率,又會再次記錄在 zoom 中了。

 

有些程式會建議在 NavigationCompleted 再設定縮放率,不過此時設定好像畫面會先重置再重設,因此在 SourceChanged 先設定會比較好。

 

程式如下:

 

bool SetWebViewZoom = false; // 是否設定 WebView 縮放率

 

webView = new WebView2();

webView.NavigationStarting += WebView_NavigationStarting;

webView.SourceChanged += WebView_SourceChanged;

webView.NavigationCompleted += webView_CoreWebView2NavigationCompleted;

webView.ZoomFactorChanged += WebView_ZoomFactorChanged;

 

 

private void WebView_NavigationStarting(object sender, CoreWebView2NavigationStartingEventArgs e)

{

    SetWebViewZoom = false;

}

private void WebView_SourceChanged(object sender, CoreWebView2SourceChangedEventArgs e)

{

    // 設定 webView2 縮放率

    webView.ZoomFactor = zoom / 100.0;

}

private void webView_CoreWebView2NavigationCompleted(object sender, CoreWebView2NavigationCompletedEventArgs e)

{

    SetWebViewZoom = true;

}

private void WebView_ZoomFactorChanged(object sender, EventArgs e)

{

    if (SetWebViewZoom) {

        zoom = (int)(webView.ZoomFactor * 100.0);

    }

}

 

底下簡單描述流程:

 

  • 使用者將畫面縮小至 0.75

 

此時觸發 ZoomFactorChanged,

記錄最新的縮放率,設定 zoom = 75 (0.75 * 100 = 75)

 

  • 使用者開啟新頁

 

此時觸發 NavigationStarting

將變數 SetWebViewZoom 設為 false

 

接著新頁縮放重置為 1,觸發 ZoomFactorChanged

但因為 SetWebViewZoom 為 false

所以不會記錄 zoom = 100

zoom 依然是 75

 

接著觸發 SourceChanged

設定縮放率,webView.ZoomFactor 設為 0.75

 

再觸發 CoreWebView2NavigationCompleted

將變數 SetWebViewZoom 設為 true

之後若再縮放畫面,又可以記錄在 zoom 變數中了。

 

之後看到的新頁面依然是縮放率為 0.75 的畫面了。

 
重要度:
文章分類:
電腦標籤:

發表新回應

借我放一下廣告