私はTreeView
WPF: C# の初心者で、動的に作成された を操作する方法を学んでいますTreeViewItems
。現在、私のプログラムでは、ユーザーが動的に作成してTreeViewItems
から削除することができます。次のステップとして、これらの動的アイテムの名前を変更する機能をプログラムしたいと考えています。理論的には、このプロセスは自明ですが、C# コードをどうすればよいかわかりません。
まず最初に、名前を変更するプロセスの概要を説明し、助けが必要な場所を正確に示したいと思います。
- ユーザーが
TreeViewItem
- A
contextMenu
ドロップダウン (完了) - ユーザーが「名前の変更...」をクリックすると、ウィンドウが開きます (完了)
- の名前
TreeViewItem
が入力されましたtextBox
(DONE) - のテキストがmainWindow のと
textBox
一致する場合、別のウィンドウが開き、ユーザーは の新しい名前を入力できます。(不完全な)header
TreeView
TreeViewItem
- 名前が新しいウィンドウに入力されると、ユーザーが [Enter] をクリックすると、項目の名前が に入力された名前に変更され
textBox
ます。(不完全な)
header
ステップ 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();
}
手順 6 では、動的に作成された を使用してを追加する方法は理解していますが、既存のものを取得して名前を変更する方法がわかりません。これは私のコードです: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;
}
}
}