C# 在ItemsControl中包装复选框内容而不使用wpf C的TextBlock时出现问题#

C# 在ItemsControl中包装复选框内容而不使用wpf C的TextBlock时出现问题#,c#,wpf,xaml,checkbox,itemscontrol,C#,Wpf,Xaml,Checkbox,Itemscontrol,我是C#的新手,一直遇到一些问题。我试图将复选框添加到ItemsControl,如果选中,则读取复选框的标题。复选框标题必须包装在Items控件中,因为标题可能会很长。下面的代码将项目添加到my items控件,但文本未包装: var items = new ObservableCollection<CheckBox>(); items.Add(new CheckBox() { Content = "Long text", IsChecked = fa

我是C#的新手,一直遇到一些问题。我试图将复选框添加到ItemsControl,如果选中,则读取复选框的标题。复选框标题必须包装在Items控件中,因为标题可能会很长。下面的代码将项目添加到my items控件,但文本未包装:

        var items = new ObservableCollection<CheckBox>();
        items.Add(new CheckBox() { Content = "Long text", IsChecked = false }); 
        itemControl.ItemsSource = items;
控制台将只输出内容是文本块,它显示
System.Windows.Controls.TextBlock

我尝试了很多方法,试图让包装和标题都能被阅读。不幸的是,所有的一切都落空了。我试图查看是否可以访问Content方法从textblock获取字符串,但没有骰子,
item.Content.textblock
无法访问


任何帮助都将不胜感激。

您已设置好了吗?@ChrisW。我有一个项目模板,是的。但我认为,不能用这种方式设置复选框的换行<代码>文本包装不是复选框的成员。除非有别的办法。哦,我误解了。如果您正在讨论将复选框的内容设置为换行(而不是仅使用分别带有checbox/textblock的stackpanel),那么您可以编辑一个复选框样式模板,将ContentPresenter替换为一个带有模板的textblock,并将其绑定到设置了textbrapping的内容,就完成了。不过,唯一需要注意的是,它不再支持嵌入对象或文本以外的任何内容。是的,对于您的实例,如果您想要自定义复选框,可以右键单击复选框->编辑模板->编辑副本,然后在控件上或在资源字典或其他内容中弹出模板副本。然后,您只需插入一个
复选框
是一个
内容控件
,因此它将使用您指定的
数据模板
以您喜欢的方式显示您的项目。如果没有一个好的方法,就不可能完全理解您的场景,但是我认为您永远不应该有
可观察的收集
;相反,您应该有
observateCollection
,为该模型定义一个
DataTemplate
(在该模型中,您已声明模板以您想要的方式进行包装),并将
复选框.Content
绑定到该项(即
Content={Binding}
)。
        var items = new ObservableCollection<CheckBox>();
        items.Add(new CheckBox() { Content = {Text = "Long text", TextWrapping = TextWrapping.WrapWithOverflow}, IsChecked = false }); 
        itemControl.ItemsSource = items;
        foreach (CheckBox item in listBox.Items)
        {
            if (item.IsChecked == true)
                Console.WriteLine(item.Content);
        }