まず、問題のコンテキストを示します。 私たちはWPFに移行することを決めた大きな従来のWinFormsアプリケーションを持っています。しかし、アプリを一から完全に書き直すことは不可能(ビジネスを含む多くの理由から)であり、私たちはこの移行を段階的に(ある形で次々に)行います。ですから、今はWinFormsアプリケーションでWPFウィンドウとコントロールを使用する必要があります。フォームからWPFウィンドウを開いた後、WinFormsアプリケーションはスケーリングを変更します
今日私は移行プロセスの第一歩を踏み出しました。私はWPF上で簡単なフォームを作成しました(ウィンドウになりました)。 WPFで再作成したばかりの新しいウィンドウは、他のフォームのボタン(標準のWindowsFormsフォーム)を押すことで開くことができます。 重要な注意:私のWindowsは120 DPIのために設定されています。デフォルトでは96ではありません。 新しいウィンドウがどのように見えるかを知るために、
これは私が見たものです: アプリケーションは正常に起動し、いつものように見えました。私は "親"フォームを開いて、新しいWPFウィンドウを開くためにボタンを押しました。 WPFウィンドウを開いた後、が表示されますが、新しいWPFウィンドウを含むすべての表示アプリケーション要素(メインウィンドウ、 "親"フォーム、ボタン、ツールバーなど)はサイズが大きくなり、より大きく見えるようになりました。 それはすべてではありません。私がWPFウィンドウを閉じたとき、スケールに何も起こらなかった - すべてのapp要素は大きなままでした。その後、私はWPFウィンドウを開いた "親"フォームを閉じました。そして、ここでは、すべてのアプリの要素が元のサイズに戻されるという魔法がありました。 それから、親フォームとWPFウィンドウを再び開きましたが、スケールは変更されず、すべてのapp要素がそのサイズを保持しました。私は "親"フォームとWPFウィンドウの "open-close"を何度も繰り返しました(同じアプリケーションの実行中、私はアプリケーションを再起動しませんでした) - 要素のサイズ変更はありません。 コードを置くと、メインアプリケーションが初期化される前にProgram.csファイル内のWPFアセンブリの任意の型が使用され、アプリケーションは常にすべてのコードを描画します。 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)が役立ちます –