1. ホーム
  2. wpf

[解決済み】WPFのコントロールが利用可能なスペースを埋めるようにするにはどうすればいいですか?

2022-03-26 02:36:07

質問

一部のWPFコントロール(例えば Button は、高さを指定しないと、コンテナ内の空きスペースをすべて消費してしまうようです。

そして、いくつかは、私が今使用する必要があるような、(複数行にわたる) TextBoxListBox は、内容を収めるのに必要なスペースだけを確保することをより重視しているようです。

こいつらをセルに入れると UniformGrid を使用すると、使用可能なスペースに合わせて展開されます。しかし UniformGrid のインスタンスは、すべての状況に適しているわけではありません。いくつかの行に * 高さを設定して、それ自身と他の * 行の間で高さを分割するグリッドを使用する場合はどうでしょうか。もし StackPanel を用意し Label , a ListButton ラベルとボタンが占有していないスペースを、リストが占めるようにするにはどうしたらよいでしょうか。

これは本当に基本的なレイアウトの要件だと思うのですが、どうすれば埋められるスペースを埋められるのかがわからないのです(それらを DockPanel を設定し、それをfillに設定してもうまくいかないようです。 DockPanel は、そのサブコントロールが必要とするスペースを占有するだけです)。

リサイズ可能なGUIは、もしあなたが Height , Width , MinHeight , MinWidth などです。

をバインドできますか? HeightWidth プロパティを、占有するグリッドセルに設定できますか?それとも他に方法があるのでしょうか?

どのように解決するのですか?

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

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

の最後の子である。 DockPanel は残りのスペースを埋めます。 この動作を無効にするには LastChild プロパティを false .

StackPanel は、各子供に希望するサイズを尋ね、それらを積み重ねる。 スタックパネルは Measure() は、それぞれの子に対して、利用可能なサイズの Infinity を作成し、その子の希望するサイズを使用します。

A Grid は利用可能なすべてのスペースを占めますが、各子供を希望するサイズに設定し、セル内で中央に配置します。

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

参照 この記事 は簡単な例です。