ListBox不会在多列WPF中水平显示数据

时间:2016-11-29 14:02:56

标签: c# wpf xaml listbox

我在这里阅读了一些有关该问题的帖子,但仍未找到问题的解决方案,我也使用了此guide

我的ListBox仍显示为带有ScrollViewer的长列表,而不是我所指的水平。

XAML:已编辑!

<DockPanel LastChildFill="False" IsEnabled="{Binding IsWindowEnabled}" MinWidth="724" Background="Red">
    <!-- save notifictaion popup -->
    <Label DockPanel.Dock="Top" Margin="10" FontSize="15" Foreground="Green" Content="{x:Static ml:MultiLang._123}" x:Name="ML_0003" />
    <StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Margin="10 0">
        <Label Content="Select Constant Type" Margin="0 0 10 0" />
        <ComboBox Width="150" ItemsSource="{Binding ComboNames}" DisplayMemberPath="Value" SelectedValuePath="Key" SelectedValue="{Binding SelectedComboType}" />
    </StackPanel>
    <ListBox DockPanel.Dock="Top" BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Stretch"  Margin="10" ItemsSource="{Binding Combos}" SelectedItem="{Binding SelecetedCombo}" ScrollViewer.CanContentScroll="False" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" Margin="0 0 0 5">
                    <Label Content="{Binding Index}" Margin="10 0" Width="20" />
                    <TextBox Width="150" Margin="0" IsEnabled="{Binding IsEditable}" Text="{Binding Path=Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</DockPanel>

但我的名单仍然是这样的:

图片:编辑第2期

enter image description here

我做错了什么?

非常感谢!

3 个答案:

答案 0 :(得分:1)

请尝试从

更改ItemPanel
isnull()

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

忽略上述建议。

修改

您可以尝试为您在DataTemplate中使用的内部堆栈面板提供背景颜色吗?像

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

它将让您了解stackpanel如何占用ListBox项目中的空间。然后我们可以尝试调整每个ListBoxItem的宽度

编辑2

这就是我在我身边看到的

Output

和XAML是

<DataTemplate>
                <StackPanel Background="Blue" Orientation="Horizontal" Margin="0 0 0 5">
                    <Label Content="{Binding Index}" Margin="10 0" Width="20" />
                    <TextBox Width="150" Margin="0" IsEnabled="{Binding IsEditable}" Text="{Binding Path=Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
                </StackPanel>
            </DataTemplate>

答案 1 :(得分:1)

问题是你在列表框中设置了220的宽度,并且因为项目在包装面板中,它们将垂直显示,尝试增加宽度

<ListBox Width="220" [OTHER PROPERTIES]>

增加宽度

<ListBox Width="520" [OTHER PROPERTIES]>

或者如果您的设计允许,请删除width属性并让列表框填充它的父级

答案 2 :(得分:0)

默认情况下,ListBox使用名为VirtualizingStackPanel的面板来排列其项目 垂直。

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