gpt4 book ai didi

c# - WPF ChromiumWebBrowser 最好的打开和关闭开发工具

转载 作者:太空宇宙 更新时间:2023-11-03 15:02:35 25 4
gpt4 key购买 nike

我有使用 ChromiumWebBrowser CefSharp.Wpf.dll 49.0.0.0 的标准 WPF 应用程序。 将版本升级到最新版本将是真正的噩梦,因此我不能将其视为一个选项。我有一个打开和关闭开发工具的小错误:

我通过命令绑定(bind)打开我的开发工具:

<FrameworkElement.Resources>
<views:FreezableProxyClass x:Key="ProxyElement"
ProxiedDataContext="{Binding Source={x:Reference This}, Path=DataContext}" />
</FrameworkElement.Resources>
<FrameworkElement.ContextMenu>
<ContextMenu>
<MenuItem Command="{Binding OpenDevToolsCommand}"
Header="Open Chrome Dev Tools">
<MenuItem.Icon>
<Image Source="../../Images/dev_tools_20x20.png"
Width="20"
Height="20" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</FrameworkElement.ContextMenu>

<FrameworkElement.InputBindings>
<KeyBinding Key="F12"
Command="{Binding Source={StaticResource ProxyElement},
Path=ProxiedDataContext.OpenDevToolsCommand}" />

</FrameworkElement.InputBindings>
<browser:WebBrowserEx BrowserContainer="{Binding}" />

命令处理程序代码:

  private void OpenDevToolsCommandHandler()
{
if (Browser.IsBrowserInitialized)
{
Browser.ForceShowingDevTools = !Browser.ForceShowingDevTools;
}
else
{
MessageBox.Show("Wait till the full browser initialization", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning);
}
}

并且扩展的 Web 浏览器代码具有 ForceShowingDevTools 依赖属性:

 public bool ForceShowingDevTools
{
get { return (bool)GetValue(ForceShowingDevToolsProperty); }
set { SetValue(ForceShowingDevToolsProperty, value); }
}

// Using a DependencyProperty as the backing store for ForceShowingDevTools. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ForceShowingDevToolsProperty =
DependencyProperty.Register("ForceShowingDevTools", typeof(bool), typeof(WebBrowserEx), new PropertyMetadata(false,
(o, e) =>
{
WebBrowserEx browserEx = o as WebBrowserEx;
if (browserEx != null)
{
if ((bool)e.NewValue)
{
browserEx.ShowDevTools();
}
else
{
browserEx.CloseDevTools();
}

}
}));

ShowDevToolsCloseDevTools 取自原始的 WebBrowserExtensions 类。

当我仅通过上下文菜单或 F12 键绑定(bind)打开和关闭我的开发工具时,它工作正常,但当我通过开发工具窗口右上角的“关闭窗口”按钮关闭开发工具时,我的代码无法识别:

enter image description here

此关闭不会通知我的属性,因此当下一个命令调用该处理程序时,我的应用程序认为浏览器已打开并尝试关闭它。因此,我需要调用我的命令两次才能打开开发工具,如果它之前不是通过我的命令绑定(bind)(从“X”按钮)关闭的话。

是否有打开和关闭开发工具的替代选项?

最佳答案

我只是(而且确实如此,即使使用更高版本的 CEF Sharp)有一个按钮/菜单选项来仅“显示”开发工具,而不用担心跟踪它是打开还是关闭。

如果 devtools 窗口尚未打开,ShowDevTools 只会显示它,这样您也不需要调用 CloseDevTools 或进行任何跟踪。

如果您真的想跟踪窗口是否打开,您可以随时使用 SetWindowsHookEx API 进行试验:

SetWindowsHookEx in C#

https://msdn.microsoft.com/en-us/library/ms644990(VS.85).aspx

..这不是我自己用过的东西。

关于c# - WPF ChromiumWebBrowser 最好的打开和关闭开发工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45410060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com