329

一部のWPFコントロール(のようなButton)は、高さを指定しない場合、コンテナー内の使用可能なすべてのスペースをうまく消費しているように見えます。

そして、私が今使用する必要があるもののように、(マルチライン)TextBoxとはListBox、コンテンツを収めるために必要なスペースをとるだけで、それ以上は心配していないようです。

これらの人をのセルに入れるUniformGridと、利用可能なスペースに合わせて拡張されます。ただし、UniformGridインスタンスはすべての状況に適しているわけではありません。いくつかの行が*高さに設定されているグリッドがあり、それ自体と他の*行の間で高さを分割している場合はどうなりますか?StackPanelを持っていて、、、、を持っている場合Label、ラベルとボタンで食べられていないすべてのスペースを占めるリストを取得するにはListどうすればよいですか?Button

これは本当に基本的なレイアウト要件だと思いますが、可能なスペースを埋める方法がわかりません(aに入れて、DockPanel埋めるように設定することもできません。唯一は、DockPanelそのサブコントロールに必要なスペースを占有します)。

Height、、、などWidthで遊ぶ必要がある場合MinHeight、サイズ変更可能なGUIは非常に恐ろしいものになります。MinWidth

Height自分のプロパティを自分が占有しているグリッドセルにバインドできますWidthか?または、これを行う別の方法はありますか?

4

4 に答える 4

261

コントロールが使用可能なスペースを埋めることができない場合に、コントロールを強制的に埋めるために設定できるプロパティもいくつかあります。たとえば、次のように言えます。

HorizontalContentAlignment="Stretch"

... コントロールのコンテンツを強制的に水平方向に引き延ばします。または、次のように言うことができます。

HorizontalAlignment="Stretch"

...コントロール自体を強制的に水平方向に伸ばして、その親を埋めます。

于 2008-08-31T04:34:37.063 に答える
172

から派生する各コントロールは、およびPanelで実行される個別のレイアウト ロジックを実装します。Measure()Arrange()

  • Measure()パネルとその子それぞれのサイズを決定します
  • Arrange()各コントロールがレンダリングされる四角形を決定します

の最後の子がDockPanel残りのスペースを埋めます。この動作を無効にするには、LastChildプロパティを に設定しますfalse

StackPanel、各子に目的のサイズを尋ねてから、それらを積み重ねます。スタック パネルはMeasure()、使用可能なサイズで各子を呼び出してInfinityから、子の目的のサイズを使用します。

AGridは使用可能なすべてのスペースを占有しますが、各子を目的のサイズに設定し、セルの中央に配置します。

から派生させ、 および をオーバーライドすることにより、独自のレイアウト ロジックを実装できPanelます。MeasureOverride()ArrangeOverride()

簡単な例については、この記事を参照してください。

于 2008-08-31T10:04:15.150 に答える
23

さて、投稿直後に自分で理解しました。これが最も恥ずかしい方法です。:)

StackPanelのすべてのメンバーは、要求された最小サイズを単純に満たすようです。

DockPanelで、間違った順序でドッキングしていました。TextBoxまたはListBoxが配置のない唯一のドッキングされたアイテムである場合、またはそれらが最後に追加された場合、それらは必要に応じて残りのスペースを埋めます。

私はこれを処理するよりエレガントな方法を見たいと思っていますが、それは可能です。

于 2008-08-30T17:28:01.893 に答える
6

水平方向の配置と垂直方向の配置のレイアウトプロパティを使用します。これらは、要素が必要とするよりも多くのスペースが使用可能な場合に、要素が親の内部にあるスペースをどのように使用するかを制御します。

たとえば、StackPanelの幅は、それに含まれる最も幅の広い要素と同じ幅になります。したがって、すべての狭い要素には少し余分なスペースがあります。配置プロパティは、子要素が余分なスペースで何をするかを制御します。

両方のプロパティのデフォルト値はStretchであるため、子要素は使用可能なすべてのスペースを埋めるように引き伸ばされます。追加のオプションには、Horizo ​​ntalAlignmentの場合はLeft、Center、Right、VerticalAlignmentの場合はTop、Center、Bottomがあります。

于 2008-08-31T10:24:05.820 に答える