如何在 WPF 的 ListBox 中将 CheckBoxes 放置在不同的 rows/columns 中?
How to place CheckBoxes in different rows/columns within a ListBox in WPF?
在我的 WPF 桌面应用程序中,我有一个列表框,我想用它显示两行两列(即 2x2 网格),在四个 row/column 点中的每一个点都有一个复选框 -我的 XAML 代码如下。请注意,我不想进行任何数据绑定。下面的代码有效,但显示的是所有四个复选框都在彼此的顶部,即使我已经指定它们应该在不同的 rows/columns 中。有人可以指出我做错了什么以及如何更正 XAML 吗?我在 Internet 上找到的每个示例都是数据绑定示例,这需要没有数据绑定(即显式)。
<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
。 ListBox
是一个 ItemsControl
并且您并不是真正在处理绑定项,因此您应该使用不同的控件来实现您的解决方案。像下面这样的东西应该可以工作:
<ScrollViewer Height="50"
HorizontalAlignment="Center">
<WrapPanel Width="150">
<CheckBox Name="Wcf"
Content="WCF"
Width="75" />
<CheckBox Name="Asp"
Content="ASP.NET"
Width="75" />
<CheckBox Name="Java"
Content="Java"
Width="75" />
<CheckBox Name="WhatIsThis"
Content="C+"
Width="75" />
<CheckBox Content="WCF"
Width="75" />
<CheckBox Content="ASP.NET"
Width="75" />
<CheckBox Content="Java"
Width="75" />
<CheckBox Content="C+"
Width="75" />
<!-- add as many items as you want -->
</WrapPanel>
</ScrollViewer>
如果您希望内容可以滚动,请将 ScrollViewer
包裹在您的 WrapPanel
周围并设置高度。
证明:
注意:我强烈建议您尽可能使用数据绑定。
在我的 WPF 桌面应用程序中,我有一个列表框,我想用它显示两行两列(即 2x2 网格),在四个 row/column 点中的每一个点都有一个复选框 -我的 XAML 代码如下。请注意,我不想进行任何数据绑定。下面的代码有效,但显示的是所有四个复选框都在彼此的顶部,即使我已经指定它们应该在不同的 rows/columns 中。有人可以指出我做错了什么以及如何更正 XAML 吗?我在 Internet 上找到的每个示例都是数据绑定示例,这需要没有数据绑定(即显式)。
<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
。 ListBox
是一个 ItemsControl
并且您并不是真正在处理绑定项,因此您应该使用不同的控件来实现您的解决方案。像下面这样的东西应该可以工作:
<ScrollViewer Height="50"
HorizontalAlignment="Center">
<WrapPanel Width="150">
<CheckBox Name="Wcf"
Content="WCF"
Width="75" />
<CheckBox Name="Asp"
Content="ASP.NET"
Width="75" />
<CheckBox Name="Java"
Content="Java"
Width="75" />
<CheckBox Name="WhatIsThis"
Content="C+"
Width="75" />
<CheckBox Content="WCF"
Width="75" />
<CheckBox Content="ASP.NET"
Width="75" />
<CheckBox Content="Java"
Width="75" />
<CheckBox Content="C+"
Width="75" />
<!-- add as many items as you want -->
</WrapPanel>
</ScrollViewer>
如果您希望内容可以滚动,请将 ScrollViewer
包裹在您的 WrapPanel
周围并设置高度。
证明:
注意:我强烈建议您尽可能使用数据绑定。