2016-04-23 79 views
7

打开WPF窗口起初我想给的问题的一些背景后,改变其缩放: 我们有大笔遗产WinForms应用程序,我们决定搬到WPF。但是它不可能(出于很多原因,包括业务)从头开始完全重写应用程序,我们将逐步进行这种迁移(一种形式一个接一个地)。所以现在我们需要在WinForms应用程序中使用WPF窗口和控件。WinForms应用程序从形式

今天我已经在迁移过程中迈出了第一步:我在WPF上重新创建了一些简单的表单(它变成了一个Window)。我刚刚在WPF上重新创建的新窗口是通过按下其他窗体上的按钮(这是标准WindowsForms窗体)打开的。 重要注意事项:我的Windows设置为120 DPI,而不是默认的96. 所有的事情都很好,直到我启动应用程序时才看到新窗口的样子。

所以,这就是我所看到的: 应用程序正常启动,看起来一如既往。我打开“父”窗体并按下按钮打开新的WPF窗口。按下按钮WPF窗口按预期打开后,,但所有可见的应用程序元素(主窗口,“父”窗体,按钮,工具栏等),包括新的WPF窗口,增加了它们的大小,他们开始看起来更大。 这不是全部。当我关闭WPF窗口时,没有发生任何规模 - 所有应用程序元素仍然很大。然后我关闭了“父”形式,从中打开WPF窗口。这就是魔术 - 所有的应用程序元素都调整回原来的大小。 然后,我再次打开“父”窗体和WPF窗口 - 但规模没有改变,所有的应用程序元素保持其大小。我多次重复“父”窗体和WPF窗口的“开 - 关”(在同一应用程序运行期间,我没有重新启动应用程序) - 不调整元素的大小。

之后,我做了一些调查,并得出了这个结论: 如果我把任何代码,它使用WPF程序集中的任何类型,在主应用程序初始化之前的Program.cs文件中,那么应用程序将始终绘制其所有要素比以前要大,但是当打开WPF窗口时,将不会发生规模变化。在Program.cs文件的 例(在我的情况下,它被称为入口点):

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

我添加了标有****线(抱歉,无法弄清楚如何使代码段线加粗)。在几次测试中,我明白了,无论我添加什么代码都无关紧要 - 它可以创建新的System.Windows.Window对象,甚至不显示它,或者使用WPF程序集中任何类型的任何其他代码行。

所以,主要的问题是:什么会导致描述的行为?如果有人遇到这个问题,或者有任何想法,如果你分享你的想法,这将是伟大的。

谢谢你阅读这个不是那么简短的问题。

+0

如果有人使用VB.NET这个[回复其他类似问题](https://stackoverflow.com/a/46668038/4676223)可能会帮助你 –

回答