私は、他のアプリケーション、WPFおよびWindowsフォームで再利用できるWindowsフォームダイアログを設計しました。これは、Windowsフォームアプリケーションで使用するとうまく動作しますが、WPFアプリケーションで呼び出されるとレイアウトの問題が発生します。サイズとサイズは、画面上のピクセル、WinFormsのAPIとSpy ++のピクセルから測定した場合、一貫性がありません。このウィンドウは、Spy ++よりもデバッガなしで実行すると、10ピクセル幅が広く、背が高いことがわかります。ここで何が問題なの?私は何も見つかりませんが、それはひどく壊れた.NET Frameworkだと言います。ダイアログには別のスペースが要求されていません
ここFormクラスのコードです:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace DialogTestApp
{
internal class MyDialog : Form
{
public MyDialog()
{
Text = "Title";
Width = 500; // -> actually 510 (Spy++ says 500)
Height = 300; // -> actually 310 (Spy++ says 300)
Font = SystemFonts.MessageBoxFont;
FormBorderStyle = FormBorderStyle.FixedDialog;
MaximizeBox = false;
MinimizeBox = false;
ShowInTaskbar = false;
StartPosition = FormStartPosition.CenterScreen;
TableLayoutPanel mainLayout = new TableLayoutPanel();
mainLayout.BackColor = Color.FromArgb(255, 171, 255); // pink
mainLayout.Dock = DockStyle.Fill;
mainLayout.Margin = Padding.Empty;
mainLayout.Padding = Padding.Empty;
mainLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize)); // Only use minimum required space
mainLayout.RowStyles.Add(new RowStyle(SizeType.Percent, 100));
Controls.Add(mainLayout);
int row = 0;
Label label = new Label();
label.Text = "Hello world. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque suscipit vestibulum gravida.";
label.Font = new Font(Font.FontFamily, 12);
label.MaximumSize = new Size(mainLayout.Width, 0);
label.AutoSize = true;
label.Dock = DockStyle.Fill;
label.Margin = Padding.Empty;
label.BackColor = Color.FromArgb(58, 171, 58); // green
label.ForeColor = Color.White;
mainLayout.Controls.Add(label, 0, row++);
TextBox textBox = new TextBox();
textBox.Dock = DockStyle.Fill;
textBox.Margin = Padding.Empty;
textBox.Multiline = true;
textBox.ScrollBars = ScrollBars.Both;
mainLayout.Controls.Add(textBox, 0, row++);
}
}
}
ただ、空のWPFアプリケーションプロジェクトにこのファイルを入れて、アプリケーションのコンストラクタから呼び出す:
public MainWindow()
{
InitializeComponent();
new MyDialog().ShowDialog();
Application.Current.Shutdown();
}
ここでは、デバッガで見えるものです:
そしてなし:
追加ピンクのボーダーがあることになっていません10個のピクセルです。緑のラベルは、すべてのスペースを埋めるように設定されています。
のWindows 10 ...問題はありません。 – Spawn
あなたの**内部**クラスMyDialogは他のWPFプロジェクトでインスタンシエートすることはできません(友人のアセンブリでない限り)、別のクラスをインスタンス化していますか? –
問題であるかどうかは不明ですが、 'label.AutoSize = true;'と 'label.DockStyle = DockStyle.Fill'は競合しています。 'AutoSize'は' Text'または 'Font'が変更されたときに' PreferredSize'にパックしようとします。 'DockStyle.Fill'は親コントロールの' LayoutEngine'によって使用されるヒントです。 – Loathing