【问题标题】:NavigationWindow Click Sound导航窗口点击声音
【发布时间】:2013-08-21 14:52:07
【问题描述】:

我有一个 WPF 应用程序,它使用导航窗口和框架在 xaml 页面之间导航。每次它在页面之间移动时都会发出咔哒声。有没有办法禁用它?

到目前为止,我已经尝试过:

namespace FrameTesting
{
public partial class MainWindow : NavigationWindow
{
    private const int FEATURE_DISABLE_NAVIGATION_SOUNDS = 21;
    private const int SET_FEATURE_ON_THREAD = 0x00000001;
    private const int SET_FEATURE_ON_PROCESS = 0x00000002;
    private const int SET_FEATURE_IN_REGISTRY = 0x00000004;
    private const int SET_FEATURE_ON_THREAD_LOCALMACHINE = 0x00000008;
    private const int SET_FEATURE_ON_THREAD_INTRANET = 0x00000010;
    private const int SET_FEATURE_ON_THREAD_TRUSTED = 0x00000020;
    private const int SET_FEATURE_ON_THREAD_INTERNET = 0x00000040;
    private const int SET_FEATURE_ON_THREAD_RESTRICTED = 0x00000080;

    public MainWindow()
    {
        int feature = FEATURE_DISABLE_NAVIGATION_SOUNDS;
        CoInternetSetFeatureEnabled(feature, SET_FEATURE_ON_PROCESS, true);
        InitializeComponent();
    }

    [DllImport("urlmon.dll")]
    [PreserveSig]
    [return: MarshalAs(UnmanagedType.Error)]
    static extern int CoInternetSetFeatureEnabled(
         int FeatureEntry,
         [MarshalAs(UnmanagedType.U4)] int dwFlags,
         bool fEnable);
}

}

【问题讨论】:

  • 你解决了这个问题吗,罗伯特?我也不能让它在带有 IE10 的 Win7 x64 上运行。
  • 我从来没有得到这个工作。我最终放弃了使用导航窗口的想法,并在页面之间导航时只使用数据模板设置内容区域。

标签: c# wpf


【解决方案1】:

你想要的函数叫做CoInternetSetFeatureEnabled,你可以在接受的答案to this question中找到一些额外的信息。

由于 WPF 在后台使用 WebBrowser 控件,因此这也应该适用于 Frame 控件。

【讨论】:

  • 我已经用一些代码更新了我的问题。我是不是因为仍然听到咔哒声而做错了什么?
  • 是IE7还是更高版本?这应该可以,但也许您需要在 WebBrowser 控件加载后执行此操作。它可能需要先在 urlmon 中初始化其他东西。我唯一可以建议的另一件事是我已经看到 DllImport 指定 ExactSpelling=true 但我无法想象为什么这会适用于此。
  • 我正在运行 IE8。设置 ExactSpelling=true 不起作用。我怎么知道 WebBrowser 控件何时加载以添加此代码?
【解决方案2】:

把它放在你的主课上:

private const int Feature = 21; //FEATURE_DISABLE_NAVIGATION_SOUNDS
private const int SetFeatureOnProcess = 0x00000002;

[DllImport("urlmon.dll")]
[PreserveSig]
[return: MarshalAs(UnmanagedType.Error)]
static extern int CoInternetSetFeatureEnabled(int featureEntry,
[MarshalAs(UnmanagedType.U4)] int dwFlags,
bool fEnable);

然后将其添加到您的代码中(已加载窗口):

CoInternetSetFeatureEnabled(Feature, SetFeatureOnProcess, true);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多