打开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程序集中任何类型的任何其他代码行。
所以,主要的问题是:什么会导致描述的行为?如果有人遇到这个问题,或者有任何想法,如果你分享你的想法,这将是伟大的。
谢谢你阅读这个不是那么简短的问题。
如果有人使用VB.NET这个[回复其他类似问题](https://stackoverflow.com/a/46668038/4676223)可能会帮助你 –