0

从 .txt 文件中提取后,我列出了一个结果列表。我想在列出的每个结果后面添加一个复选框。以下是我的代码:

    private void LoadFile() {
        List<string> lines = new List<string>();
        try
        {
            StreamReader sr = new StreamReader("test.txt");
            while (!sr.EndOfStream)
            {
                lines.Add(sr.ReadLine());
            }
            sr.Close();

            for (int i = 3; i < lines.Count; i++)
            {
                resultsTreeView.Items.Add(lines[i].ToString().Substring(67,17));
                resultsTreeView.Items.Add(CheckBox[i]);
            }

我如何添加复选框,因为提取的结果每次都会改变?我想跟踪哪些框也已检查,以便我可以将结果打印给用户。谢谢!

4

2 回答 2

0
            for (int i = 3; i < lines.Count; i++)
            {
                resultsTreeView.Items.Add(lines[i].ToString().Substring(67,17));
                resultsTreeView.Items.Add(new CheckBox()); 
                // resultsTreeView.Items.Add(BuildCheckBox())
            }

或者

CheckBox BuildCheckbox()
{
   CheckBox C = new CheckBox();
   return C;
}

这就是创建复选框所需的全部内容,或者您​​可以创建一个返回复选框的函数,在其中创建一个新的复选框实例并以您想要的方式设置属性/订阅事件并返回它。

至于跟踪哪些复选框被选中,我只需要你提供给我你的“resultsTreeView”的类型

编辑 :

要遍历 TreeView 中的复选框并对选中的复选框执行某些操作:

resultsTreeView.Items.OfType<CheckBox>().ToList()
                .ForEach(C => 
                { 
                    if (C.IsChecked.HasValue && C.IsChecked.Value == true) 
                    { 
                        //DoSomething
                    } 
                });
于 2013-07-08T11:00:46.360 回答
0

我不确定你在寻找什么。我假设 resultsTreeView 是 TreeViewItem。而且我还假设您在 wpf 中工作。您可以通过 wpf 执行以下操作。

for (int i = 0; i < lines.Count(); i++)
{
    resultsTreeView.Items.Add(lines[i].ToString().Substring(67,17));
}


<TreeView x:Name="resultsTreeView" HorizontalAlignment="Left" Height="100" Margin="37,344,0,0" VerticalAlignment="Top" Width="257" >
    <TreeView.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding}"/>
                <CheckBox/>
            </StackPanel>
        </DataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

类似的事情可以通过后面的代码来完成

for (int i = 0; i < mylist.Count(); i++)
{
    resultsTreeView.Items.Add(mylist[i]);
}
resultsTreeView.ItemTemplate = TreeViewDataTemp;

然后通过以下方式创建 TreeViewDataTemp

private static DataTemplate TreeViewDataTemp
    {
        get
        {
            DataTemplate TVDT = new DataTemplate();

            FrameworkElementFactory Stack = new FrameworkElementFactory(typeof(StackPanel));
            Stack.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);

            FrameworkElementFactory TextB = new FrameworkElementFactory(typeof(TextBlock));
            TextB.SetValue(TextBlock.TextProperty, new Binding());

            FrameworkElementFactory ChkBox = new FrameworkElementFactory(typeof(CheckBox));

            Stack.AppendChild(TextB);
            Stack.AppendChild(ChkBox);

            TVDT.VisualTree = Stack;

            return TVDT;
        }
    }

以上为您提供了 1 个项目,它是文本和一个复选框。或者,您的方法将在您添加的每个字符串项之后添加一个复选框作为新项。这是

for (int I=0; I<lines.Count(); I++)
{
    resultsTreeView.Items.Add(mylist[i]);
    resultsTreeView.Items.Add(new CheckBox());
}
于 2013-07-08T11:05:22.937 回答