如何在一行中显示Wpf ListBox中的元素

时间:2014-08-12 13:50:05

标签: c# wpf xaml listbox

我得到了一点xaml:

                    <ListBox Grid.Column="1"
                             HorizontalAlignment="Stretch"
                             VerticalAlignment="Stretch"
                             ItemsSource="{Binding Channels}">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <CheckBox Content="{Binding Item}" IsChecked="{Binding IsChecked}" />
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                        <ListBox.ItemsPanel>
                            <ItemsPanelTemplate>
                                <WrapPanel Orientation="Vertical">                                       
                                </WrapPanel>
                            </ItemsPanelTemplate>
                        </ListBox.ItemsPanel>
                    </ListBox>

现在,列表框将显示每个元素的复选框以及字符串。所有这些项目将显示在一行中,当项目太多时,列表框将可滚动。

我希望列表框能够自动显示更像WinForms CheckedListBox的项目。它应该自动确定适合它的列数并相应地显示复选框。这是可能的,如果是的话,你能告诉我该怎么做吗?

提前谢谢你!

1 个答案:

答案 0 :(得分:-1)

如果您不需要ListBox,则可以改为使用ItemsControl

<ScrollViewer VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto">
  <ItemsControl Grid.Column="1"
                             HorizontalAlignment="Stretch"
                             VerticalAlignment="Stretch"
                             ItemsSource="{Binding Channels}">
    <ItemsControl.ItemTemplate>
      <DataTemplate>
        <CheckBox Content="{Binding Item}" IsChecked="{Binding IsChecked}" />
      </DataTemplate>
    </ItemsControl.ItemTemplate>
      <ItemsControl.ItemsPanel>
      <ItemsPanelTemplate>
        <WrapPanel Orientation="Vertical" VerticalAlignment="Stretch" >
        </WrapPanel>
      </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
  </ItemsControl>
</ScrollViewer>