Как разместить CheckBox в разных строках / столбцах в ListBox в WPF?
В моем настольном приложении WPF у меня есть ListBox, который я хотел бы отобразить с двумя строками и двумя столбцами (то есть сеткой 2x2) с флажком в каждой из четырех точек строки / столбца - мой код XAML приведен ниже. Обратите внимание, что я не хочу делать привязку данных. Приведенный ниже код работает, но на самом деле все четыре флажка расположены друг над другом, хотя я и указал, что они должны находиться в разных строках / столбцах. Может ли кто-нибудь указать, что я делаю неправильно и как исправить 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>
1 ответ
Вы злоупотребляете 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
и установить высоту на нем.
Доказательство:
Примечание. Я настоятельно рекомендую вам использовать привязку данных, когда это возможно.