如何根据它的标题选择一个TabItem

在我的程序中,我有一个tabItem ,当选择具有等效headerTreeViewItem时,它会被选中。

这就是我现在拥有的(它有效):

 (parent_TreeViewItem.Items.Contains(SelectedItem)) { tabControl1.SelectedItem = tabControl1.Items //Changes tab according to TreeView .OfType().SingleOrDefault(n => n.Header.ToString() == SelectedItem.Header.ToString()); } 

与我这次正在做的事情的不同之tabItem在于我选择的tabItemheader由一个string和一个integer

例如:选中的TreeViewItem将始终具有名为"Arrival"header ,但tabItemheader将具有"Arrival" + integerinteger数值将来自父节点的header

对于这个过程,我认为我首先需要获取父节点的header值,因为它包含我需要的integer数值。 然后我需要修改上面的代码以查询具有header的节点,如"Arrival" + parentHeader

我该怎么办?

谢谢。

UPDATE

我目前的代码,使用@ varocarbas的答案。 我正在使用答案的第一个版本,涉及将integer curNumber设置为父header的值。 单击“到达”节点时,代码将编译但不执行任何操作。

 if (parent_TreeViewItem.Items.Contains(SelectedItem.Parent)) //Location - Actions tabs { TreeViewItem parentItem = (TreeViewItem)SelectedItem.Parent; int curNumber = getNumber(parentItem.Header.ToString()); tabControl1.SelectedItem = tabControl1.Items //Changes tab according to TreeView .OfType().SingleOrDefault(n => n.Header.ToString() == SelectedItem.Header.ToString() + curNumber.ToString()); } public static int getNumber(string parentNodeHeader) { int curNumber = 0; curNumber = Convert.ToInt32(parentNodeHeader); return curNumber; } 

更新2:因为“Arrival”节点是我用作父节点的节点的孙子,所以我将第一行中的if语句更改为:

  if (parent_TreeViewItem.Items.Contains(SelectedItem.Parent)) 

首先,您必须获取父节点和其标头中包含的数字:

 TreeViewItem parentItem = (TreeViewItem)selectedItem.Parent; int curNumber = getNumber(parentItem.Header.ToString()); 

getNumber是一个从父节点头中的确切位置检索数字的函数。 为了写出一个合适的函数,你必须告诉它更多的东西; 暂时,只是基础知识(它提取输入字符串中的所有数字):

 private int getNumber(string parentNodeHeader) { int curNumber = 0; //Required string-analysis actions //Sample functionality: extract all the numbers in the given string string outString = ""; int count = -1; do { count = count + 1; Char curChar = Convert.ToChar(parentNodeHeader.Substring(count, 1)); if (Char.IsNumber(curChar)) { outString = outString + parentNodeHeader.Substring(count, 1); } } while (count < parentNodeHeader.Length - 1); if (outString != "") { curNumber = Convert.ToInt32(outString); } return curNumber; } 

然后,您必须更新查询以考虑新信息:

  .OfType().SingleOrDefault(n => n.Header.ToString() == selectedItem.Header.ToString() + curNumber.ToString()); 

UPDATE

上面的函数只显示了我通常依赖的代码类型; 但是对于简单的情况(比如建议在字符串中获取所有数字),您可能更喜欢依赖于Viv所建议的Regex 。 您可能会依赖以下内容:

 private int getNumber(string parentNodeHeader) { System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(parentNodeHeader, @"\d+"); return Convert.ToInt32(m.Value); } 

此函数仅提供它找到的第一组连续数字; 与上述function不同的结果,但足以作为概念certificate(这个答案的意图)。