2011-03-25 8 views
9

Tengo un control de usuario de winforms con varios botones en un control de WPF.Configuración de "AcceptButton" de WPF WindowsFormHost

Mi usercontrol estaba alojado previamente en forma de ventana y yo era capaz de por lo

this.ParentForm.AcceptButton = this.btnSearch; 

Estoy tratando de establecer cómo hacerlo similar en el control de usuario ahora que está en el WindowsFormHost. La propiedad ParentForm es nula.

Hay dos cosas que idealmente me gustaría lograr.

  1. comportamiento AcceptButton (Enter principales factores desencadenantes pulse el botón)
  2. formato AcceptButton - es decir, el botón de Windows Forms tiene el formato alternativo para aceptar los botones aplicados.

Muchas gracias, Chris

Respuesta

1

WPF Window s no tienen el concepto de Windows Forms de AcceptButton. Es probable que no pueda obtener la clave Enter para activar automáticamente su controlador btnSearch.Click. Además, tampoco podrá obtener el estilo alternativo para el botón Aceptar.

Podría exponer potencialmente un método en su control de Windows Forms que actúa como si hubiera hecho clic en el botón de búsqueda, y llamar a ese método desde el lado WPF cuando se presiona Enter. De lo contrario, encontrará que falta la interacción entre los controles Forms y los controles WPF (WindowsFormsHost nunca tuvo la intención de proporcionar acceso de fidelidad completa).

+0

Pensé/temía que este fuera el caso. Voy a dejar sin respuesta por unos días más para ver si surgen mejores ideas. Aclamaciones – Chris

0

No estoy seguro, pero puedo ajustar el enfoque a ese botón? Por lo tanto, tendría el mismo comportamiento que en winforms.

+0

El "botón de aceptar" no tiene foco (normalmente). Se "hace clic" cuando el usuario presiona la tecla Intro en algún otro control (que tiene foco), si ese control está configurado para no aceptar las pulsaciones de tecla Intro. Es una función de IsDialogMessage. – Tergiver

+0

Conozca acerca de este Tergiver, acaba de pensar en una solución :) –

+0

Necesito un cuadro de texto para tener el foco - el caso de uso es un campo de búsqueda, y presionar enter debería desencadenar la búsqueda.Prefiero no tener que implementar el manejo del teclado por campo en winforms para admitir wpf. – Chris

14

Establezca Button.IsCancel (Esc) o IsDefault (Enter) en los botones de la página.

Ejemplo:

<Button Content="Yes" Click="Yes_Button_Click" IsDefault="True"/> 
<Button Content="No" Click="No_Button_Click" IsCancel="True"/> 
0

Es desafortunado que no hay AcceptButton en WPF - y molesto.

Implementé correctamente la funcionalidad al manejar el evento KeyUp del Formulario. Aquí está el código:

private void Window_KeyUp(object sender, KeyEventArgs e) 
{ 
    if(e.Key == Key.Enter) 
    { 
     TargetButton_Click(sender, null); 
    } 
} 

parece funcionar bien. En mi caso, tengo cuadros de texto en el formulario WPF y el usuario ingresa valores y visitas, y parece funcionar bien. Puede haber problemas con algún control que anula (agarra el evento KeyUp) antes del formulario o algo así, por lo que su millaje puede variar. :)

0

Establezca la propiedad del botón predeterminado IsDefault en verdadero.

Cuestiones relacionadas