Ser*_*gey 8 .net c# wpf xaml winforms
首先,我想提出一些问题的背景:我们有大型的遗留WinForms应用程序,我们决定转向WPF.但是从头开始完全重写应用程序是不可能的(包括业务在内的很多原因),我们将逐步完成这种迁移(一种接一种形式).所以现在我们需要在WinForms应用程序中使用WPF窗口和控件.
今天我在迁移过程中迈出了第一步:我在WPF上重新创建了一些简单的表单(它变成了一个Window).我刚刚在WPF上重新创建的新窗口是通过按下其他窗体上的按钮打开的(这是标准的WindowsForms格式). 重要提示:我的Windows设置为120 DPI,而不是默认96.所有的事情都很好,直到我启动应用程序看看是什么新窗口.
所以,这就是我所看到的:App正常启动,并且一如既往地看着.我打开"父"窗体并按下按钮打开新的WPF窗口.按下按钮WPF窗口按预期打开后,但所有可见的应用程序元素(主窗口,"父"窗体,按钮,工具栏等),包括新的WPF窗口,增加了它们的大小,它们开始变得更大.并非全部.当我关闭WPF窗口时,没有任何规模发生 - 所有应用程序元素仍然很大.然后我关闭了"父"表单,从中我打开了WPF窗口.这就是魔术 - 所有应用程序元素都重新调整为原始大小.然后我再次打开"父"窗体和WPF窗口 - 但是缩放没有改变,所有应用程序元素都保持了它们的大小.我多次重复"打开 - 关闭""父"窗体和WPF窗口(在相同的应用程序运行期间,我没有重新启动应用程序) - 没有调整元素的大小.
在此之后,我进行了一些调查,并得出了这样的结论:如果我在主应用程序初始化之前在Program.cs文件中放置任何代码,使用WPF程序集中的任何类型,那么应用程序将始终绘制比它们更大的所有元素之前,但在打开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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我添加了标有****的行(对不起,无法弄清楚如何在代码段中使行变粗).在我理解的几个测试中,我添加的代码并不重要 - 它可以创建新的System.Windows.Window对象,即使没有显示它,也可以使用WPF程序集中任何类型的任何其他代码行.
所以,主要的问题是:什么可能导致描述的行为?如果有人遇到这个问题,或者有任何想法,如果你分享你的想法,它会很棒.
感谢您阅读这个不那么简短的问题.
通过向启动项目添加[DisableDpiAwareness]属性解决了问题.另外,我发现了有关此问题的更多信息:
混合WinForms和WPF应用程序中的.Net 3.5中的DPI缩放
希望这会对某人有所帮助.
归档时间: |
|
查看次数: |
2044 次 |
最近记录: |