【发布时间】:2015-12-11 18:56:26
【问题描述】:
在我的 WPF 桌面应用程序中,我有一个 ListBox,我想用两行和两列(即 2x2 网格)显示,在四个行/列点中的每一个点都有一个复选框 - 我的 XAML 代码是以下。请注意,我不想进行任何数据绑定。下面的代码有效,但显示的是所有四个 CheckBox 都在彼此之上,即使我已经指定它们应该位于不同的行/列中。有人可以指出我做错了什么以及如何更正 XAML?我在互联网上找到的每个示例都是数据绑定示例,这需要没有数据绑定(即显式)。
<ListBox Margin="0,0,10,10" Name="myListBox" Height="139" VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="112" >
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="50"/>
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<CheckBox Content="WCF" Grid.Row="0" Grid.Column="0"/>
<CheckBox Content="ASP.NET" Grid.Row="0" Grid.Column="1"/>
<CheckBox Content="Java" Grid.Row="1" Grid.Column="0"/>
<CheckBox Content="C+" Grid.Row="1" Grid.Column="1"/>
</ListBox>
【问题讨论】:
-
恐怕你不能在没有绑定的情况下做到这一点。
ListBox将项目包装在ListBoxItem中,它成为ItemsPanel的直接子项,您可以通过绑定在ItemsContainerStyle中设置Grid.Column和/或Grid.Row -
谢谢。我使用 ListBox 因为它是可滚动的,如果我想添加更多行。您是否建议切换到 ListView、DataGrid 或其他控件? (再次,因为我不需要这些数据绑定)
-
那么不要使用
ListBox,把你的Grid放到ScrollViewer中 -
我认为您使用 ScrollViewer 是对的。但是,所以我可以学习如何通过绑定来做到这一点,你是否有一个简单示例的链接,说明如何通过绑定列表(使用 ScrollViewer、ListBox、ListView 等)来做到这一点?
-
如果你想通过绑定检查this回答例如
标签: wpf xaml listview listbox itemspaneltemplate