Following the approach mentioned in the below link I was able to override default context menu.
How do you override the ContextMenu that appears when right clicking on WebView2 Control?
I have a question is there a way to show both based on some condition like
That's actually easy, when you have the code from that link.
The contextmenu
event derives from MouseEvent
, so it has information about the control keys being pressed.
Simply replace the javascript contextmenu
handler to:
document.addEventListener('contextmenu', function (event)
{
if (!event.ctrlKey && !event.shiftKey)
{
let jsonObject =
{
Key: 'contextmenu',
Value:
{
X: event.screenX,
Y: event.screenY
}
};
window.chrome.webview.postMessage(jsonObject);
event.preventDefault();
}
});
It works so that if a control key is pressed, it does absolutely nothing, which will show the default menu. If no keys are pressed, it sends the coordinates to C# and calls event.preventDefault();
.
Note: In the code from that link, I call:
webView21.CoreWebView2.Settings.AreDefaultContextMenusEnabled = false;
Here, you should NOT call that. Instead call event.preventDefault();
in javascript.