2010-06-07 8 views
7

Tengo una aplicación WPF que usa la ventana de navegación y los marcos para navegar entre páginas xaml. Cada vez que va entre las páginas, hace un clic. ¿Hay alguna forma de desactivar eso?NavigationWindow Click Sound

Hasta aquí he intentado esto:

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

¿Trabajó éste hacia fuera, Robert? No puedo hacer que funcione en Win7 x64 con IE10 tampoco. –

+0

Nunca funcionó. Terminé abandonando la idea de utilizar la ventana de navegación y decidí simplemente establecer un área de contenido con una plantilla de datos al navegar entre páginas. – Robert

Respuesta

2

La función que desea se llama CoInternetSetFeatureEnabled y se puede encontrar información adicional en la respuesta aceptada to this question.

Dado que WPF usa el control WebBrowser bajo el capó, esto debería funcionar también para el control Frame.

+0

He actualizado mi pregunta con algún código. ¿Hice algo mal porque aún escucho el clic? – Robert

+0

¿Es IE7 o superior? Eso debería funcionar, pero tal vez deba hacerlo después de que se haya cargado el control WebBrowser. Puede necesitar inicializar algo más en urlmon primero. La única otra cosa que puedo sugerir es que he visto que DllImport especifica ExactSpelling = true, pero no puedo imaginar por qué se aplicaría aquí. – Josh

+0

Estoy ejecutando IE8. Configurar ExactSpelling = true no funciona. ¿Cómo sabría cuándo se cargó el control WebBrowser para agregar este código? – Robert

1

poner esto en su clase principal:

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

y luego añadir esto en su código (Ventana Cargado):

CoInternetSetFeatureEnabled(Feature, SetFeatureOnProcess, true);