C# 如何重命名动态创建的TreeView项的标题

C# 如何重命名动态创建的TreeView项的标题,c#,wpf,treeview,C#,Wpf,Treeview,我对WPF:C中的TreeView是新手,我正在学习如何使用动态创建的TreeView项。现在,我的程序允许用户创建动态TreeViewItem,然后删除它们。对于我的下一步,我想编程的能力,重命名这些动态项目。从理论上讲,这个过程非常简单,但是,我不知道如何处理C代码 首先,我想概述一下我的重命名过程,以准确地显示我需要帮助的地方 用户右键单击树视图项 一个contextMenu下拉菜单“完成” 用户单击重命名。。。一扇窗户打开了 在文本框中输入TreeViewItem的名称已完成 如果文本框

我对WPF:C中的TreeView是新手,我正在学习如何使用动态创建的TreeView项。现在,我的程序允许用户创建动态TreeViewItem,然后删除它们。对于我的下一步,我想编程的能力,重命名这些动态项目。从理论上讲,这个过程非常简单,但是,我不知道如何处理C代码

首先,我想概述一下我的重命名过程,以准确地显示我需要帮助的地方

用户右键单击树视图项 一个contextMenu下拉菜单“完成” 用户单击重命名。。。一扇窗户打开了 在文本框中输入TreeViewItem的名称已完成 如果文本框中的文本与主窗口的TreeView中的标题匹配,则会打开另一个窗口,允许用户输入TreeView项的新名称。残缺的 在新窗口中输入名称时,用户单击enter,项目名称将更改为文本框中输入的名称。残缺的 这是我的第5步代码,程序需要验证输入的头是否存在于TreeView中。在我不确定正确代码的地方,我有伪代码

//ENTER - Select TreeViewItem, open enterName window
private void button2_Click(object sender, RoutedEventArgs e)
{
       //Query for Window1
       var mainWindow = Application.Current.Windows
           .Cast<Window1>()
           .FirstOrDefault(window => window is Window1) as Window1;

       //If(textbox1.text == one of the treeViewItem headers)
       var newWindow = new EnterCartName();
       newWindow.Show();

       //else,
       //MessageBox.Show("Value entered does not match a current cart name");
       //this.Close();
}
我认为动态TreeView资产的主要问题是我觉得它们对我来说是无形的。如果我不知道它们叫什么,或者不知道如何正确地引用它们,我该如何处理它们呢。如果您知道有关此主题的任何指南或资源,请随时与我们分享

非常感谢

我的最终解决方案:


设置好收割台非常简单:

treeViewItem.Header = textBox1.Text;
查找它应该类似于查找任何TreeViewItem.Header是否与文本框中提供的文本匹配:

然后,当您具有将标题更改为的值时:

SetItemHeader(treeView.Items, textInputToMatch, textToChangeHeaderTo);

我明白你的意思,但这种方式不包括步骤6或我的第二个窗口。您是否建议用户在同一窗口中同时输入TreeViewItem的名称和它的新名称?不,我认为您可以自己对标题匹配方法稍微编辑此方法,然后使用此方法更新标题。不过,我已经更新了我的答案。好吧,我只是用你的解决方案更新了我的答案。但是,检查一直返回为false,我肯定输入了正确的名称。您应该将ItemCollection从TreeView传递到CheckItemHeader方法,而不仅仅是一个TreeView项。。。除非所有其他树上的动物都是它的孩子。您必须调试这些方法以查看传入的项。。。你是唯一能做到这一点的人。是的,我通过TreevieItem是因为我只想和它的孩子们打交道。那么在这种情况下,我应该调试吗?
treeViewItem.Header = textBox1.Text;
private void SetItemHeader(ItemCollection treeViewItems, string input, string output)
{
    for (int index = 0; index < treeViewItems.Count; index++)
    {
        TreeViewItem item = (TreeViewItem)treeViewItems[index];
        if (item.Header == input)
        {
            item.Header = output;
            return;
        }
        else if (item.Items.Count > 1) SetItemHeader(item.Items, input, output);
    }
}
private bool CheckItemHeader(ItemCollection treeViewItems, string input)
{
    for (int index = 0; index < treeViewItems.Count; index++)
    {
        TreeViewItem item = (TreeViewItem)treeViewItems[index];
        if (item.Header == input) return true;
        else if (item.Items.Count > 1) return CheckItemHeader(item.Items, input);
    }
    return false;
}
bool hasFoundMatch = CheckItemHeader(treeView.Items, textInputToMatch);
SetItemHeader(treeView.Items, textInputToMatch, textToChangeHeaderTo);