WPF 的本机浏览器控件不允许您设置自定义上下文菜单。
情况变得更糟;当您的鼠标在浏览器组件上时,或者如果它有焦点,它也不会捕获您的输入生成的事件。
解决此问题的一种方法是在 WindowsFormsHost 中使用 Windows 窗体浏览器控件。
首先,添加Windows.Forms
到您的项目引用中。
然后,执行以下操作:
XAML:
<Window x:Class="blarb.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<WindowsFormsHost Name="windowsFormsHost" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
</Grid>
</Window>
C#代码:
public partial class MainWindow : Window
{
private System.Windows.Forms.WebBrowser Browser;
public MainWindow()
{
InitializeComponent();
//initialise the windows.forms browser component
Browser = new System.Windows.Forms.WebBrowser
{
//disable the default context menu
IsWebBrowserContextMenuEnabled = false
};
//make a custom context menu with items
System.Windows.Forms.ContextMenu BrowserContextMenu = new System.Windows.Forms.ContextMenu();
System.Windows.Forms.MenuItem MenuItem = new System.Windows.Forms.MenuItem {Text = "Take Action"};
MenuItem.Click += MenuItemOnClick;
BrowserContextMenu.MenuItems.Add(MenuItem);
Browser.ContextMenu = BrowserContextMenu;
//put the browser control in the windows forms host
windowsFormsHost.Child = Browser;
//navigate the browser like this:
Browser.Navigate("http://www.google.com");
}
private void MenuItemOnClick(object sender, EventArgs eventArgs)
{
//will be called when you click the context menu item
}
}
不过,这还没有解释如何突出显示。
您可以在完成加载时侦听浏览器组件触发的事件,然后替换它加载的文档部分,注入 html 代码来进行突出显示。
请记住,在某些情况下这可能会很棘手(例如,在选择文本divs
时)spans
paragraphs