WPF ListBoxItem没有延伸到wrappanel

时间:2015-04-23 07:20:13

标签: c# wpf

我正在尝试创建一个包含自定义控件的Listbox,它可以包装automic.My listbox xaml代码,如下所示。我需要在每一行中有三个项目,并且拉伸到最大宽度。如果我需要包装到下一行。三件以上的物品。我需要在水平方向上进行自定义控制拉伸而不是全方位。我怎么能这样做?

<ScrollViewer HorizontalScrollBarVisibility="Disabled">
            <ListBox>
                <ListBox.Template>
                    <ControlTemplate TargetType="{x:Type ListBox}">
                        <WrapPanel Orientation="Horizontal" IsItemsHost="True" />
                    </ControlTemplate>
                </ListBox.Template>

                <ListBoxItem>
                    <controls:TransducerItem  Margin="5,10"/>
                </ListBoxItem>

                <ListBoxItem>
                    <controls:TransducerItem  Margin="5,10"/>
                </ListBoxItem>


                <ListBoxItem>
                    <controls:TransducerItem  Margin="5,10"/>
                </ListBoxItem>

                <ListBoxItem>
                    <controls:TransducerItem Margin="5,10" />
                </ListBoxItem>

                <ListBoxItem>
                    <controls:TransducerItem  Width="200" Margin="5,10" />
                </ListBoxItem>
            </ListBox>

1 个答案:

答案 0 :(得分:1)

使用包含三列的UniformGrid ItemsPanel

<ListBox>
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid Columns="3" VerticalAlignment="Top"/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    ...
</ListBox>

您也可以在ListBox的ItemTemplate中使用TransducerItem控件

<ListBox.ItemTemplate>
    <DataTemplate>
        <controls:TransducerItem  Margin="5,10"/>  
    </DataTemplate>
</ListBox.ItemTemplate>

然后将ListBox的ItemsSource属性绑定到包含每个TransducerItem数据的数据项集合:

<ListBox ItemsSource="{Binding TranducerData}">
    ...
</ListBox>

查看MSDN上的Data Templating Overview文章。