2017-11-15 17 views
0

質問は WPF: when I maximize my window, controls do not resizeには未回答です。コントロールは最大化するとサイズが変更されませんが、ドラッグしてサイズを変更した場合は変更されません - wpf

私はフォームの少なくとも2つの辺に結びついたいくつかのコントロールを持つWPFフォームを持っています。私はフォームのサイズの比率としてコントロールのサイズを変更するsizechangedイベントにコードを追加しました。コードが正常に動作し、コントロールのサイズを正しくドラッグしてフォームのサイズを変更すると、正しくサイズが変更されます。

フォームが最大化されると、コントロールはサイズ変更されず、ウィンドウの上部と下部の両方に取り付けられたコントロールに垂直に保存されます。

私はstatechangedイベントに同様のコードを追加しましたが、これは何もしません。私はストレートTextBox1.Width = 300;を試しましたが、これは一度最大化されたサイズを変更しません。

私が言いたいことは理想的です。 TextBox1.Width = Window.width/3; TextBox1.Margin = My_Margin;ここで、My_Marginは、左余白を1/3のWindow.Widthに設定します。テキストボックスがウィンドウの中央3分の1を占めるようにします。

編集:私は、GRIDメソッドがプロジェクトの始めから行く方法だったことを理解しています。フォームを修正する代わりに、C#でこの段階で行うことができる回避策がありますか?

編集:私の唯一の選択肢のように、実際の質問には答えられませんが、最高の答えを受け入れました。 フォームが最大化されたらコントロールのサイズを変更する方法があることは知っていますが、それを見つける時間がなく、良い提案はありませんでした。

+0

"フォームサイズの比率としてコントロールのサイズを変更するsizechangedイベントにコードを追加しました。"これは意味をなさない。 WPFは強力なレイアウトシステムを提供します。ここから読んでください:https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/layout次に、コンテナ要素としてグリッドを使用します。 – Clemens

+0

私はグリッドが最良の方法だと理解しましたが、この問題に対処し、コードでこれを解決してフォームを再作成することなく対処できることを期待していました。これは可能ですか? – Ritchie

+0

私は、その方向への努力を止め、適切なレイアウトを使用することを強くお勧めします。それは時間の無駄です。 – Clemens

答えて

3

グリッドを使用し、幅(列幅)と行を定義し、Grid.RowプロパティとGrid.Columnプロパティを使用してテキストボックスを配置します。また、WPFグリッドでは、幅と高さの*は比例サイズを意味します。あなたはこれらのもののように定義2列

<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="1*"></ColumnDefinition> 
    <ColumnDefinition Width="9*"></ColumnDefinition> 
</Grid.ColumnDefinitions> 

を持っている場合 だから例えば、あなたは最初の列が第二の90%ながら、利用可能な総幅の10%を占めるだろうというWPFために言っています。

+0

のように「適切なレイアウト」を実装することを確信しています。これは最初にこのようなことを考えましたが、他のコントロールは、この方法はすべてを敷設することは非常に困難であった。 それは私がコメントした通りにレイアウトしていないので、この段階でレイアウトを再編集するのは非常に難しいと思います。 C#コードでコントロールのサイズを変更する方法はありませんか? – Ritchie

+0

私は強くこの練習を実装するために少し時間がかかることを強くお勧めします。また、あなたのコントロールには(正確な寸法を必要としない限り)ハードコードしないことを強くお勧めします。このようにして、すべての可能なモニターとサイズの中で見た目を保つアプリを作成することができます。 –

+0

今後のプロジェクトでこれを行うことに同意し、これを行う予定です。この段階で回避策はありますか? – Ritchie

関連する問題