带有复选框的WPF列表框显示为空白,动态添加

时间:2010-05-05 16:26:01

标签: c# wpf listbox checkbox

我正在尝试使用系列复选框条目填充列表框,但是一旦运行列表框下面的代码,其中有空白条目,可以选择,即出现蓝色条。但是,文本或复选框都不会出现。

for (int num = 1; num <= 10; num++)
{
   CheckBox checkBox = new CheckBox();
   checkBox.Text = "sheet" + num.ToString();
   checkBox.Name = "checkbox" + num.ToString();

   thelistbox.Items.Add(checkBox);
}

3 个答案:

答案 0 :(得分:8)

处理此问题的最佳方法是创建数据列表 - 在您的情况下,数字列表(或字符串列表(sheet1,sheet2等)。然后,您可以将该数字列表分配给列表框.ItemsSource。在列表框的XAML中,设置ItemTemplate以包含CheckBox并将数字绑定到复选框的文本。

答案 1 :(得分:1)

尝试更改

checkBox.Text = "sheet" + num.ToString();

checkBox.Content = "sheet" + num.ToString();

通过这项更改,我能够成功使用您的示例。

答案 2 :(得分:1)

要跟进Brian的评论,下面是C#wpf中简单复选框列表的概述。这将需要更多代码来处理检查/取消选中框和一般的交互后处理程序。此设置显示复选框列表中两个对象列表(在别处定义)中元素的差异。

XAML

...
    <ListBox Name="MissingNamesList" ItemsSource="{Binding TheMissingChildren}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <CheckBox Content="{Binding Path=Name}" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
...

支持C#代码:

...
public partial class MissingNamesWindow : Window
{    
    // Make this accessible from just about anywhere
    public ObservableCollection<ChildName> TheMissingChildren { get; set; }

    public MissingNamesWindow()
    {
        // Build our collection so we can bind to it later
        FindMissingChildren();

        InitializeComponent();

        // Set our datacontext for this window to stuff that lives here
        DataContext = this;
    }

    private void FindMissingChildren()
    {
        // Initialize our observable collection
        TheMissingChildren = new ObservableCollection<ChildName>();

        // Build our list of objects on list A but not B
        List<ChildName> names = new List<ChildName>(MainWindow.ChildNamesFromDB.Except(
                                                    MainWindow.ChildNamesFromDisk).ToList());

        // Build observable collection from out unique list of objects
        foreach (var name in names)
        {
            TheMissingChildren.Add(name);
        }
    }
}
...

希望澄清一点。