web-dev-qa-db-ja.com

StackPanelwpfでコンテンツをラップする

コンテンツをStackPanelでラップすることは可能ですか?

代わりにWrapPanelを利用できることを私は知っています。ただし、コード変更の理由から、StackPanelを使用する必要があります。

だから、たとえば5つのアイテムの後にStackPanelラップのアイテムを作成する方法はありますか...ありがとう!

16
user1202434

必要な数のアイテムを含むネストされたStackPanelsを作成します。

以下の例では、それぞれ<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>
13
Douglas

私にとっては、単純なWrapPanelで問題なく動作します。

<WrapPanel Orientation="Horizontal" Width="500" />

StackPanelまたはその他のコンテナ内にはありません。また、Widthを定数値に設定すると、場合によっては優れていることがあります。これは、ActualWidthにバインドすると、ダウンサイジングを防ぐことができるためです(例:親コントロールのサイズが小さくなり、WrapPanelは小さくなりません)

19
bytecode77
<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>
9
denis morozov

シナリオに応じて、 niformGrid を使用できます。いくつかの例もあります ここ

このように5つのアイテムの後にラップするように定義できます。

<UniformGrid Columns="5">
 <Button />
 <Button />
 <Button />
</UniformGrid>

ただし、各アイテムの幅はまったく同じであるため、これが機能するかどうかはわかりません。

5
shriek

ラップパネルなしではできないと思います。たぶん、スタックパネル内にwrapPanelを配置してみることができます-その幅をスタックパネルの実際の幅に設定します。 Width="{Binding ActualWidth, ElementName=StackPanel1}"のようにバインドできます

しかし、これは単なるハックになります-ラップパネルがあなたのニーズに最も適していると思います。

0

ボタンの上にスタックパネルを置きます。ボタンの背景には影響しません。次に、VBコードで、Chr(12)を使用して、改行を示しました。

_Button1.Content = "first line" + Chr(12) + "second line"
_

Chr(12)を使用してさらに行を追加できます。

0
Joe Dobson