【问题标题】:WinForms app changes its scaling after opening WPF window from formWinForms 应用程序在从表单打开 WPF 窗口后更改其缩放比例
【发布时间】:2016-08-17 08:00:06
【问题描述】:

首先我想给出一些问题的背景: 我们有大型遗留 WinForms 应用程序,我们决定将其转移到 WPF。但是从头开始完全重写一个应用程序是不可能的(由于许多原因,包括业务),我们将逐步进行此迁移(一种又一种形式)。所以现在我们需要在 WinForms 应用中使用 WPF 窗口和控件。

今天我迈出了迁移过程的第一步:我在 WPF 上重新创建了一些简单的表单(它变成了一个窗口)。我刚刚在 WPF 上重新创建的新窗口是通过按下其他表单(这是标准的 WindowsForms 表单)上的按钮打开的。 重要提示:我的 Windows 设置为 120 DPI,而不是默认的 96。 在我启动应用程序以查看新窗口的外观之前,一切都很好。

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

在此之后,我进行了一些调查,得出了以下结论: 如果我在主应用程序初始化之前将任何使用 WPF 程序集中任何类型的代码放在 Program.cs 文件中,那么应用程序将始终绘制比以前更大的所有元素,但是在打开 WPF 窗口时不会有比例变化。 Program.cs 文件示例(在我的例子中,它称为 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();
        }
    }
}

我添加了标有 **** 的行(抱歉,无法弄清楚如何在代码 sn-p 中使行加粗)。在几次测试中,我了解到,添加什么代码并不重要——它可以创建新的 System.Windows.Window 对象,即使没有显示它,也可以创建任何其他代码行,它使用 WPF 程序集中的任何类型。

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

感谢您阅读这个不那么简短的问题。

【问题讨论】:

标签: c# .net wpf winforms xaml


【解决方案1】:

通过向启动项目添加 [DisableDpiAwareness] 属性解决了问题。 另外,我发现了有关此问题的更多信息:

Mixed WPF and winforms project DPI awareness

DPI Scaling in .Net 3.5 in Mixed WinForms and WPF Application

希望这会对某人有所帮助。

【讨论】:

    猜你喜欢
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多