コンテンツをStackPanel
でラップすることは可能ですか?
代わりにWrapPanel
を利用できることを私は知っています。ただし、コード変更の理由から、StackPanel
を使用する必要があります。
だから、たとえば5つのアイテムの後にStackPanel
ラップのアイテムを作成する方法はありますか...ありがとう!
必要な数のアイテムを含むネストされたStackPanel
sを作成します。
以下の例では、それぞれ<StackPanel Orientation="Horizontal">
要素で占められている2つの行があり、それぞれに5つの項目が含まれており、これらの項目は互いに横に並べて表示されます。
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<Item1 />
<Item2 />
<Item3 />
<Item4 />
<Item5 />
</StackPanel>
<StackPanel Orientation="Horizontal">
<Item1 />
<Item2 />
<Item3 />
<Item4 />
<Item5 />
</StackPanel>
</StackPanel>
私にとっては、単純なWrapPanel
で問題なく動作します。
<WrapPanel Orientation="Horizontal" Width="500" />
StackPanel
またはその他のコンテナ内にはありません。また、Widthを定数値に設定すると、場合によっては優れていることがあります。これは、ActualWidthにバインドすると、ダウンサイジングを防ぐことができるためです(例:親コントロールのサイズが小さくなり、WrapPanelは小さくなりません)
<StackPanel>
<StackPanel.Style>
<Style TargetType="{x:Type StackPanel}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type StackPanel}">
<WrapPanel/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</StackPanel.Style>
</StackPanel>
シナリオに応じて、 niformGrid を使用できます。いくつかの例もあります ここ 。
このように5つのアイテムの後にラップするように定義できます。
<UniformGrid Columns="5">
<Button />
<Button />
<Button />
</UniformGrid>
ただし、各アイテムの幅はまったく同じであるため、これが機能するかどうかはわかりません。
ラップパネルなしではできないと思います。たぶん、スタックパネル内にwrapPanelを配置してみることができます-その幅をスタックパネルの実際の幅に設定します。 Width="{Binding ActualWidth, ElementName=StackPanel1}"
のようにバインドできます
しかし、これは単なるハックになります-ラップパネルがあなたのニーズに最も適していると思います。
ボタンの上にスタックパネルを置きます。ボタンの背景には影響しません。次に、VBコードで、Chr(12)
を使用して、改行を示しました。
_Button1.Content = "first line" + Chr(12) + "second line"
_
Chr(12)
を使用してさらに行を追加できます。