WPF: Il modo migliore per aprire una finestra popup che è modale alla pagina?

StackOverflow https://stackoverflow.com/questions/429200

  •  06-07-2019
  •  | 
  •  

Domanda

Sto creando un'app WPF usando pagine di stile di navigazione e non Windows. Voglio mostrare una finestra all'interno di una pagina, questa finestra deve essere modale alla pagina, ma consentire all'utente di andare su un'altra pagina e tornare alla stessa pagina con la finestra modale nello stesso stato.

Ho provato con il controllo popup WPF ma il problema è che il controllo si nasconde ogni volta che ti allontani dalla pagina. Immagino di poter scrivere il codice per mostrarlo di nuovo, ma non si adatta nel modo giusto.

Qual è il modo migliore per farlo in WPF?

È stato utile?

Soluzione

Questo StackOverflow answer può aiutarti nella tua strada. Ho creato un codice di esempio che alcuni altri utenti hanno richiesto. Ho aggiunto questo a un post sul blog qui .

Spero che questo aiuti!

Altri suggerimenti

Perché non usare semplicemente pump di messaggi nidificati per creare controlli modali

http://www.deanchalk.com / WPF-modali-controlli-via-dispatcherframe-nested-message-pompe /

Potresti creare una classe popup che utilizza il livello adornatore per inserirsi in cima a tutto il resto.

Crea una classe base per il tuo popup che abbia una proprietà chiamata IsOpen e quando viene cambiata imposta la visibilità dei controlli sul valore appropriato.

Per interrompere la selezione dei controlli sotto il popup, è possibile fare in modo che il popup prenda l'intera dimensione della pagina. Lo avresti per lo più trasparente ad eccezione del mezzo effettivo in cui il popup. Se si desidera che sia eseguito in modo completamente trasparente per il popup, è necessario sovrascrivere HitTestCore sul popup.

Qualcosa del genere:

protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters)
{
    // We want this control to behaive as a single rectangle and we don't much care
    // whether or it has a solid background.  So we override this method so we can have    // mouse over info for the entire panel regardless of background.

    // run the base hit test first, because if it finds something we don't want to overrule it.
    HitTestResult result = base.HitTestCore(hitTestParameters);


    // If we didn't get a hit generate a new hit test result, because HitTestCore is never called unless
    // the mouse is over the controls bounding rectangle.
    if (result == null)
        result = new PointHitTestResult(this, hitTestParameters.HitPoint);

    return result;
}

Spero che questo possa indirizzarti nella giusta direzione.

A Windows non piace che tu lo faccia - non è una cosa di WPF. Usa un pannello sovrastante e usa la proprietà visible o zorder.

Wikipedia ha una buona discussione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top