我正在尝试创建一个包含自定义控件的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>
答案 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文章。