2010-06-07 7 views
7

Ich habe eine WPF-Anwendung, die das Navigationsfenster und Frames verwendet, um zwischen XAML-Seiten zu navigieren. Jedes Mal, wenn es zwischen den Seiten geht, macht es ein Klickgeräusch. Gibt es eine Möglichkeit, das zu deaktivieren?NavigationWindow Click Sound

Bisher habe ich versucht, dies:

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

Hast du dieses heraus, Robert? Ich kann es nicht mit Win7 x64 mit IE10 arbeiten lassen. –

+0

Ich habe das nie funktioniert. Am Ende habe ich die Idee aufgegeben, das Navigationsfenster zu verwenden, und ich habe nur einen Inhaltsbereich mit einem Datamaple gesetzt, wenn ich zwischen den Seiten navigiere. – Robert

Antwort

2

Die Funktion, die Sie CoInternetSetFeatureEnabled wollen genannt wird, und Sie können einige zusätzliche Informationen in der akzeptierte Antwort to this question finden.

Da WPF das WebBrowser-Steuerelement unter der Haube verwendet, sollte dies auch für das Frame-Steuerelement funktionieren.

+0

Ich habe meine Frage mit einem Code aktualisiert. Habe ich etwas falsch gemacht, weil ich immer noch das Klicken höre? – Robert

+0

Ist es IE7 oder höher? Das sollte funktionieren, aber vielleicht müssen Sie es tun, nachdem das WebBrowser-Steuerelement geladen wurde. Es muss möglicherweise zuerst etwas anderes in urlmon initialisiert werden. Die einzige andere Sache, die ich vorschlagen kann, ist, dass ich den DllImport gesehen habe, der ExactSpelling = true spezifiziert, aber ich kann mir nicht vorstellen, warum das hier gelten würde. – Josh

+0

Ich verwende IE8. Das Setzen von ExactSpelling = true funktioniert nicht. Woher weiß ich, wann das WebBrowser-Steuerelement geladen wurde, um diesen Code hinzuzufügen? – Robert

1

auf Ihre Hauptklasse Setzen Sie dieses:

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

Und dann diese auf Ihrem Code hinzufügen (Fenster geladen):

CoInternetSetFeatureEnabled(Feature, SetFeatureOnProcess, true);