2010-06-07 93 views
7

我有一個WPF應用程序,它使用導航窗口和框架在xaml頁面之間導航。每次它在頁面之間發出咔嗒聲。有沒有辦法禁用?NavigationWindow點擊聲音

到目前爲止,我已經試過這樣:

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); 
} 

}

+0

你工作的這一個,羅伯特?我無法使用IE10在Win7 x64上運行。 – 2013-09-17 00:55:01

+0

我從來沒有得到這個工作。我最終放棄了使用導航窗口的想法,並在頁面之間導航時僅使用數據模板設置了內容區域。 – Robert 2013-09-17 22:11:19

回答

2

你想要的功能被稱爲CoInternetSetFeatureEnabled,你可以找到在接受的答案to this question一些額外的信息。

由於WPF在引擎蓋下使用WebBrowser控件,因此它也適用於Frame控件。

+0

我用一些代碼更新了我的問題。我是否因爲仍聽到咔嗒聲而做錯了什麼? – Robert 2010-06-07 05:12:36

+0

是IE7還是更高?這應該可以,但也許你需要在WebBrowser控件加載完成後執行它。它可能需要首先在urlmon中初始化其他的東西。我可以建議的唯一的其他事情是我見過的DllImport指定ExactSpelling = true,但我無法想象爲什麼這將適用於此。 – Josh 2010-06-07 05:26:39

+0

我正在運行IE8。設置ExactSpelling = true不起作用。我怎麼知道WebBrowser控件何時加載以添加此代碼? – Robert 2010-06-12 17:41:07

1

將這個在您的主類:

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);