如何在WPF中的列表框中的不同行/列中放置复选框?

如何在WPF中的列表框中的不同行/列中放置复选框?,wpf,xaml,listview,listbox,itemspaneltemplate,Wpf,Xaml,Listview,Listbox,Itemspaneltemplate,在我的WPF桌面应用程序中,我有一个列表框,我想显示两行两列(即2x2网格),在四行/列点中各有一个复选框-下面是我的XAML代码。注意,我不想做任何数据绑定。下面的代码可以工作,但显示的是,所有四个复选框都位于彼此的顶部,尽管我已经指定它们应该位于不同的行/列中。有人能指出我做错了什么以及如何纠正XAML吗?我在互联网上找到的每个示例都是数据绑定示例,这需要没有数据绑定(即显式) 您误用了列表框ListBox是一个ItemsControl,您并不是真正在处理绑定项,因此应该使用不同的控件来实现

在我的WPF桌面应用程序中,我有一个列表框,我想显示两行两列(即2x2网格),在四行/列点中各有一个复选框-下面是我的XAML代码。注意,我不想做任何数据绑定。下面的代码可以工作,但显示的是,所有四个复选框都位于彼此的顶部,尽管我已经指定它们应该位于不同的行/列中。有人能指出我做错了什么以及如何纠正XAML吗?我在互联网上找到的每个示例都是数据绑定示例,这需要没有数据绑定(即显式)


您误用了
列表框
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>

如果您希望内容可以滚动,请在
WrapPanel
周围缠绕一个
ScrollViewer
,并设置其高度

证明:


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

如果没有绑定,恐怕您无法做到这一点
ListBox
将项目包装在
ListBoxItem
中,它成为
ItemsPanel
的直接子项,您可以通过BindingTo谢在
ItemsContainerStyle
中设置
Grid.Column
和/或
Grid.Row
。我使用列表框是因为如果我想添加更多行,它是可滚动的。您建议切换到ListView、DataGrid或其他控件吗?(再说一遍,因为我不需要对这些进行数据绑定)然后不要使用
ListBox
并将您的
Grid
放入
ScrollViewer
我认为您使用ScrollViewer是对的。但是,为了让我能够学习如何通过绑定来实现,您是否有一个链接,指向如何通过绑定列表来实现的简单示例(使用ScrollViewer、ListBox、ListView等)?如果您想通过绑定来实现,请勾选答案,例如,谢谢。我使用列表框是因为如果我想添加更多行,它是可滚动的。您建议切换到ListView、DataGrid或其他控件吗?(同样,因为我不需要为这些设置数据绑定)@swabygw如果您试图使用硬编码标签定义布局,最好不要使用从
ItemsControl
(如
ListBox
)继承的任何内容,除非您计划从代码后面向控件添加项(实际上应该只使用数据绑定,但我有偏见)我认为你使用ScrollViewer是对的。但是,为了让我了解如何通过绑定来实现,您是否有一个链接,指向如何通过绑定列表(使用ScrollViewer、ListBox、ListView等)来实现的简单示例?这里有许多MVVM/数据绑定示例。我的一个更详细的MVVM示例可以在这里找到。简而言之,您将构建一个选项集合,将其绑定到
ItemsControl.ItemsSource
,并使用
DataTemplate
定义
ItemsControl.itemstemplate
。如果这个答案在答案处有标记,也许我会写一个详细的例子;)
<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>