水平自定义列表框

时间:2016-07-26 06:47:42

标签: c# wpf xaml listbox material-design

我希望我的自定义构建ListBox在下一行显示项目,如果它们的大小超过其父控件的可用宽度。

以下是我的XAML。

<materialDesign:Card>
            <StackPanel>
                <TextBlock FontWeight="DemiBold" FontSize="30">Schedule</TextBlock>
                <ListBox ItemsSource="{Binding Schedule, Source={StaticResource dc}}">
                    <ListBox.ItemsPanel>
                        <ItemsPanelTemplate>
                            <StackPanel Orientation="Horizontal" />
                        </ItemsPanelTemplate>
                    </ListBox.ItemsPanel>
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <ListBoxItem>
                                <StackPanel Orientation="Horizontal">
                                    <StackPanel Orientation="Horizontal">
                                        <TextBlock>Day:</TextBlock>
                                        <TextBlock Text="{Binding Key, Mode=OneWay}" />
                                    </StackPanel>
                                    <materialDesign:TimePicker materialDesign:HintAssist.Hint="Time In" SelectedTime="{Binding Value.TimeIn}" />

                                    <materialDesign:TimePicker materialDesign:HintAssist.Hint="Time Out" SelectedTime="{Binding Value.TimeOut}"  />
                                </StackPanel>
                            </ListBoxItem>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </StackPanel>
        </materialDesign:Card>

以下是上述XAML的输出

Output of the Above writte

2 个答案:

答案 0 :(得分:1)

您应该使用WrapPanel代替StackPanel,然后使用。

答案 1 :(得分:0)

正如 HB 所说,你应该使用的 ItemPanel 控件是一个 WrapPanel ,让你实现你想要的(当没有&#39时) ; t足够的空间供您控制,它会创建一个新行。)

这是一个例子:

            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>