0

垂直方向に配置された WrapPanel があります。

私の問題は、要素がオーバーフローするたびに次の列に移動することです。したがって、最初の列のアイテムは垂直方向に均一に整列されます。

例: WrapPanel の高さが 170px で、WrapPanel のアイテムの高さが 35px だとします。したがって、最初の列に最初の 4 つの要素が表示され、均一な間隔で配置されます。残りの項目は次の列に転送されます。170px の高さでは、これらのアイテムに必要な高さを使用し、余分なスペースをそのまま残したいと思います。したがって、140px の後、30px のスペースを空ける必要があります。

アイテムのレイアウトとスタイリングをサポートするプロパティが非常に少ないため、WrapPanel のプロパティからこれを行う方法はありません。

これどうやってするの?

4

2 に答える 2

0

これは、達成しようとしているものに近い可能性のある UniformGrid の使用例です。

XAML

<Grid>
    <ListBox ItemsSource="{Binding GridItemsList}" >
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid Rows="2" Columns="4" FlowDirection="RightToLeft" />
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{Binding ItemName}" />
                    <StackPanel.LayoutTransform>
                        <RotateTransform Angle="-90"/>
                    </StackPanel.LayoutTransform>
                </StackPanel>

            </DataTemplate>
        </ListBox.ItemTemplate>
        <ListBox.LayoutTransform>
            <RotateTransform Angle="-90"/>
        </ListBox.LayoutTransform>
    </ListBox>
</Grid>

コードビハインド

public partial class UniformGridWindow : Window {
    public UniformGridWindow() {

        //Sample Data
        GridItemsList = new List<GridItem> {
            new GridItem("Item 1"),
            new GridItem("Item 2"),
            new GridItem("Item 3"),
            new GridItem("Item 4"),
            new GridItem("Item 5"),
            new GridItem("Item 6"),
            new GridItem("Item 7"),
            new GridItem("Item 8")
        };

        InitializeComponent();
        this.DataContext = this;
    }

    public List<GridItem> GridItemsList { get; set; }

}

public class GridItem {
    public string ItemName { get; set; }
    public GridItem(string itemName) {
        this.ItemName = itemName;
    }
}
于 2013-05-24T11:27:58.027 に答える