2009-07-27 10 views
6

Sto ospitando il controllo di Windows Form in WPF popup. Problemi di seguito:WPF Popup e WindowsFormsHost Problem

  1. Se eseguo StaysOpen = False non riesco a interagire con il controllo winform. StaysOpen to false è richiesto perché quando si fa clic su outsidet dell'area Popup, dovrebbe chiudersi.
  2. se faccio StaysOpen = True posso interagire con il controllo winform ma quando clicco fuori dall'area del popup, non viene chiuso.
  3. Ho provato a impostare StaysOpen = true in MouseEnter di popup e StaysOpen = False in MouseLeave, ma MouseLeave si attiva quando e quando il mouse si trova su controllo winform che genera un comportamento imprevisto.
  4. Ho anche provato IsMouseCaptureWithin proprietà di popup e ho trovato che non funziona con winforms (credo sia un bug nel framework).

  5. Un altro problema, stavo cercando di chiudere popup quando principale forma di radice (che è la forma di Windows) è disattivato (premuto Alt + Tab), ma questo evento (disattivare) è sparato anche quando entro in uno dei controlli in windowshostControl in popup.

comportamento desiderato:

  1. dovrebbe essere in grado di ospitare e interagire con il controllo WinForm in WPF popup.
  2. facendo clic al di fuori dell'area del popup, il popup dovrebbe chiudersi.

Apprezzare qualsiasi input.

Grazie.

risposta

2

Ho avuto molti problemi con i popup standard defacto in WPF, perché in realtà sono una nuova finestra con il proprio handle. Ciò significa che se trascini la tua applicazione sullo schermo, il popup rimane inserito (non si sposta con la finestra). Significa anche che il tuo popup ha alcuni comportamenti strani e non interagisce con la tua applicazione in modo normale.

Ho creato 2 classi decoratore per affrontare questo problema:

PopupDecorator.cs e TimeoutPopupDecorator.cs

E 'piuttosto semplice da usare:

  1. una dichiarazione namespace per le nuove classi popup . vale a dire

    xmlns: dday_wpf = "CLR-namespace: DDay.WPF"

  2. Surround l'area che si desidera che il popup per poter essere visualizzato con il decoratore. cioè

    < dday_wpf: PopupDecorator x: Name = "pop-up"> < dday_wpf: PopupDecorator.Popup> ... contenuto del popup vanno qui ... < /dday_wpf:PopupDecorator.Popup> ... il contenuto del pannello va qui ... </dday_wpf: PopupDecorator>

Funziona praticamente identico ad una normale Popup da quel momento in poi.

Questo potrebbe non risolvere tutti i tuoi problemi, ma speriamo che aiuti.

+0

Puoi darci dei link aggiornati? –

+0

Nessun problema, ho aggiornato i collegamenti per indicare la posizione corretta ora. – Doug

0

Questo suona un po 'come il mio problema nell'avviare un controllo di forma non modale da un modulo WPF.

Controllare la mia domanda Why is my WPF textbox "kinda" readonly?.

L'essere giusto, basato su ciò che Doug ha detto sui popup essendo una finestra con il proprio handle, lo rende applicabile.