问题描述
我目前正在开发一个 UWP 应用程序,我有一个 WebView 控件,用户可以与之交互。在此 WebView 中,用户可以格式化一些文本,我希望 CTRL + I
将斜体格式应用于任何选定的文本。
当按下 CTRL + I
时,应用程序格式化文本(在访问的站点上使用 jQuery 处理),但是,任何选定的文本都被替换为制表符。
我知道 CTRL + I
按键事件导致键码 9,它对应于制表符,但是,我想知道是否有办法禁用此交互?
我尝试拦截 KeyDown
和 PreviewKeyDown
事件,但没有成功。事件从未触发,我假设这是因为我在 web 视图中输入文本。
我还检查了字符没有插入,打开访问的页面时,使用普通的网络浏览器。
以下是 webview 的上下文。
<Page
<!-- imports -->
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid>
<WebView x:Name="Editor"
Source="ms-appx-web:///WebView.html"
ScriptNotify="Editor_ScriptNotify"
NavigationStarting="Editor_NavigationStarting"
NavigationCompleted="Editor_NavigationCompleted"/>
</Grid>
</Page>
解决方法
有没有办法在 .NET UWP WebView 中禁用 CTRL + I,标签插入
恐怕您无法从 uwp 端禁用 Ctrl + i。更好的方法是在 html 端使用 javascript 处理多个按键。
例如
<body>
<script type="text/javascript">
let keysPressed = {};
document.addEventListener('keyup',(event) => {
delete keysPressed[event.key];
});
document.addEventListener('keydown',(event) => {
keysPressed[event.key] = true;
if (keysPressed['Control'] && event.key == 'i') {
event.preventDefault();
document.execCommand('italic',false,null);
}
});
</script>
<div id="editor1" contenteditable="true">
The quick brown fox jumped over the lazy dog.
</div>
</body>
您可以检测 keydown 事件并使用 preventDefault
方法禁用默认行为,并在 Ctrl + i 像上面一样按下时添加执行新命令。 >