Как разместить 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 и установить высоту на нем.

Доказательство:

введите описание изображения здесь

Примечание. Я настоятельно рекомендую вам использовать привязку данных, когда это возможно.

Другие вопросы по тегам