我是WPF中的TreeView
新手:C#,我正在学习如何使用动态创建的TreeViewItems
。现在,我的程序允许用户创建动态TreeViewItems
,然后删除它们。对于我的下一步,我想编写重命名这些动态项的功能。从理论上讲,这个过程非常自我解释,但是,我不知道如何处理C#代码。
首先,我想概述一下我的重命名过程,以准确显示我需要帮助的地方。
TreeViewItem
contextMenu
下降(DONE)TreeViewItem
的姓名已输入textBox
(已完成)textBox
中的文字与mainWindow header
中的TreeView
匹配,则会打开另一个窗口,允许用户输入TreeViewItem
的新名称。 (不完全的)textBox
中输入的内容。 (不完全的)以下是我的第5步的代码,其中程序需要验证header
中是否存在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();
}
对于第6步,我了解如何使用动态创建的TreeViewItem
来add header
,但我不确定如何获取和重命名现有的//ENTER - Change cart name
private void button2_Click(object sender, RoutedEventArgs e)
{
this.Close(); //close Window
//Query for Window1
var mainWindow = Application.Current.Windows
.Cast<Window1>()
.FirstOrDefault(window => window is Window1) as Window1;
//mainWindow.treeViewItem.Header(TVI gotten from previous window) = textBox1.Text;
}
。这是我的代码:
TreeView
我认为动态//Now Global
bool hasFoundMatch;
//ENTER - Select cart, open enter name window
private void button2_Click(object sender, RoutedEventArgs e)
{
string input, output;
//Query for Window1
var mainWindow = Application.Current.Windows
.Cast<Window1>()
.FirstOrDefault(window => window is Window1) as Window1;
//Get TreeViewItem from mainWindow
TreeViewItem renameCart = mainWindow.cartTypes_TI;
input = textBox1.Text;
output = textBox2.Text;
//Check if header exists
hasFoundMatch = CheckItemHeader(renameCart.Items, input);
//if header exists - set new header
//Else - show message box
if (hasFoundMatch == true)
SetItemHeader(renameCart.Items, input, output);
else
MessageBox.Show("Value entered does not match a current cart name.");
//close window
this.Close();
}
//Checks to see whether the user entered header exists
private bool CheckItemHeader(ItemCollection treeViewItems, string input)
{
bool hasFoundMatch = false;
for (int index = 0; index < treeViewItems.Count; index++)
{
TreeViewItem item = (TreeViewItem)treeViewItems[index];
string header = item.Header.ToString();
if(header == input)
{
hasFoundMatch = true;
break;
}
else
hasFoundMatch = false;
}
return hasFoundMatch;
}
//Changes the selected TVI header
private void SetItemHeader(ItemCollection treeViewItems, string input, string output)
{
for (int index = 0; index < treeViewItems.Count; index++)
{
TreeViewItem item = (TreeViewItem)treeViewItems[index];
string header = item.Header.ToString();
if (header == input)
{
item.Header = output;
break;
}
}
}
资产的主要问题是我觉得它们对我来说是不可见的。如果我不知道他们叫什么,或者如何正确引用它们,我该如何与他们合作。如果您知道有关此主题的任何指南或资源,请随时分享。
非常感谢。
我的最终解决方案:
{{1}}
答案 0 :(得分:0)
设置标题非常简单:
treeViewItem.Header = textBox1.Text;
查找它应该类似于查找是否有TreeViewItem.Header
与TextBox
中提供的文字匹配:
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);
}
}
更新&gt;&gt;&gt;
您可以使用此方法检查项目标题...如果它返回true,则表示您匹配:
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);