[英]How to rename headers of dynamically created TreeView Items
我是WPF中的TreeView
新手:C#,我正在學習如何使用動態創建的TreeViewItems
。 現在,我的程序允許用戶創建動態TreeViewItems
然后刪除它們。 對於我的下一步,我想編寫重命名這些動態項的功能。 從理論上講,這個過程非常自我解釋,但是,我不知道如何處理C#代碼。
首先,我想概述一下我的重命名過程,以准確顯示我需要幫助的地方。
TreeViewItem
contextMenu
下降(DONE) TreeViewItem
名稱輸入到textBox
(DONE) textBox
中的textBox
與mainWindow的TreeView
中的header
匹配,則會打開另一個窗口,允許用戶輸入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步,我了解如何使用動態創建的header
添加 TreeViewItem
,但我不確定如何獲取和重命名現有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;
}
}
}
設置標題很簡單:
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);
}
}
更新>>>
您可以使用此方法檢查項目標題...如果它返回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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.