如何在 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>

您在滥用 ListBoxListBox 是一个 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 周围并设置高度。

证明:

注意:我强烈建议您尽可能使用数据绑定。