具有两个分隔列的 WPF 列表框
WPF List box with two separated columns
我必须创建与图片相同的自定义列表框。
我已经为列表框中的每个项目创建了 UpDown 控件。但是如果有很多项目,我需要在列表框中有两列。如果是两列,则必须如图所示分开,并且每一列都应该有圆角边框。
列表框代码如下:
<Style TargetType="{x:Type ListBox}" x:Key="ListBoxService">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate DataType="{x:Type model:Service}">
<Border
x:Name="border"
VerticalAlignment="Center"
BorderThickness="0, 0, 0, 2"
BorderBrush="{StaticResource CommonBackgroundColor}">
<view:ServiceUpDown/>
</Border>
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<UniformGrid Columns="2" HorizontalAlignment="Center"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/>
</Style>
感谢您的帮助。
不是您确切问题的解决方案,但也许这可以帮助您入门:
<ListBox
ItemsSource="{Binding Items}"
ScrollViewer.VerticalScrollBarVisibility="Disabled"
>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Margin"
Value="0 0 20 0" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
我已将 ListBox'ItemsPanel
设置为垂直方向 WrapPanel
,因此一旦它在 ListBox 中填满一个 "column",它就会换行到另一列。
我已经禁用了 ListBox
的垂直滚动条,否则它将有无限的垂直 space,因此 WrapPanel
永远不会换行。
一旦使用了 ListBox
的所有垂直 space,此示例会将项目包装到其他列中。根据列表框的垂直大小和项目的数量,如果需要,可能还会有第三列或第四列。您可以使用 ItemContainerStyle
来分隔列,但这并不能解决圆角边框的要求。
我必须创建与图片相同的自定义列表框。
我已经为列表框中的每个项目创建了 UpDown 控件。但是如果有很多项目,我需要在列表框中有两列。如果是两列,则必须如图所示分开,并且每一列都应该有圆角边框。
列表框代码如下:
<Style TargetType="{x:Type ListBox}" x:Key="ListBoxService">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate DataType="{x:Type model:Service}">
<Border
x:Name="border"
VerticalAlignment="Center"
BorderThickness="0, 0, 0, 2"
BorderBrush="{StaticResource CommonBackgroundColor}">
<view:ServiceUpDown/>
</Border>
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<UniformGrid Columns="2" HorizontalAlignment="Center"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/>
</Style>
感谢您的帮助。
不是您确切问题的解决方案,但也许这可以帮助您入门:
<ListBox
ItemsSource="{Binding Items}"
ScrollViewer.VerticalScrollBarVisibility="Disabled"
>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Margin"
Value="0 0 20 0" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
我已将 ListBox'ItemsPanel
设置为垂直方向 WrapPanel
,因此一旦它在 ListBox 中填满一个 "column",它就会换行到另一列。
我已经禁用了 ListBox
的垂直滚动条,否则它将有无限的垂直 space,因此 WrapPanel
永远不会换行。
一旦使用了 ListBox
的所有垂直 space,此示例会将项目包装到其他列中。根据列表框的垂直大小和项目的数量,如果需要,可能还会有第三列或第四列。您可以使用 ItemContainerStyle
来分隔列,但这并不能解决圆角边框的要求。