2016-04-23 64 views
7

Inizialmente vorrei dare qualche contesto di problema: Abbiamo una grande applicazione legacy WinForms, che abbiamo deciso di passare a WPF. Ma è impossibile (per molti motivi, incluso il business) di riscrivere completamente un'app da zero, e faremo questa migrazione passo dopo passo (una forma dopo l'altra). Quindi per ora abbiamo bisogno di usare Windows e controlli WPF nell'app WinForms.L'app WinForms modifica il ridimensionamento dopo aver aperto la finestra WPF dal modulo

Oggi ho fatto un primo passo nel processo di migrazione: ho ricreato un semplice modulo su WPF (diventato una finestra). La nuova finestra, che ho appena ricreato su WPF, viene aperta premendo il pulsante su un altro modulo (che è un modulo standard di WindowsForms). Nota importante: il mio Windows è impostato per 120 DPI, non predefinito 96. Tutte le cose andavano bene fino a quando ho iniziato l'app per vedere quale nuova finestra assomiglia.

Quindi, ecco quello che ho visto: L'app è stata avviata normalmente e sembrava sempre. Ho aperto il modulo "genitore" e premuto un pulsante per aprire la nuova finestra WPF. Dopo aver premuto il pulsante WPF finestra aperta come previsto, ma tutti gli elementi dell'applicazione visibili (finestra principale, modulo "padre", pulsanti, barre degli strumenti, ecc.), Inclusa la nuova finestra WPF, hanno aumentato le loro dimensioni, hanno iniziato a sembrare più grandi. Non è tutto. Quando ho chiuso la finestra WPF, non è successo nulla con la scala: tutti gli elementi dell'app sono rimasti grandi. Quindi ho chiuso il modulo "genitore" da cui ho aperto la finestra WPF. E qui c'era la magia: tutti gli elementi delle app ridimensionati alle dimensioni originali. Poi ho aperto di nuovo il modulo "genitore" e la finestra WPF - ma la scala non è cambiata, tutti gli elementi delle app hanno mantenuto le loro dimensioni. Ho ripetuto "open-close" di forma "parent" e finestra WPF molte volte (durante la stessa esecuzione dell'applicazione, non ho riavviato l'app) - nessun ridimensionamento di elementi.

Dopo questo ho fatto alcune indagini, ed è venuto a questo: Se metto alcun codice, che usa qualsiasi tipo di assemblee WPF, nel file di Program.cs prima dell'applicazione principale inizializza, quindi applicazione sarà sempre attirare tutta la sua elemette più grandi di prima, ma quando si apre la finestra WPF non ci saranno cambiamenti di scala. Esempio di file Program.cs (nel mio caso si chiama EntryPoint):

internal sealed class EntryPoint 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main(string[] args) 
    { 
     try 
     { 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.EnableVisualStyles(); 
      ****System.Windows.Application wpfApp = new System.Windows.Application();****    

      App.Start(args); 
      if(App.Context != null) 
       App.Show(); 
     } 
     catch(Exception ex) 
     { 
      App.ShowError(Properties.Resources.UnexpectedError, ex); 
      Application.Exit(); 
     } 
    } 
} 

Ho linea marcata con **** aggiunto (scusate, non riesco a capire come rendere linea in grassetto nel frammento di codice). Durante diversi test ho capito che non importa quale codice aggiungo: può creare un nuovo oggetto System.Windows.Window anche senza mostrarlo, o qualsiasi altra riga di codice, che utilizza qualsiasi tipo dagli assembly WPF.

Quindi, la domanda principale è: cosa può causare un comportamento descritto? Se qualcuno ha affrontato questo problema, o ha qualche idea, sarà fantastico se condividi i tuoi pensieri.

Grazie per aver letto questa domanda non così breve.

+0

Se qualcuno utilizza VB.NET questa [rispondere a un'altra domanda simile] (https://stackoverflow.com/a/46668038/4676223) potrebbe aiutarti –

risposta

Problemi correlati