【发布时间】:2013-08-21 15:32:24
【问题描述】:
In my program I have a tabItem that gets selected when a TreeViewItem with an equivalent header is selected.
这是我目前拥有的(有效):
(parent_TreeViewItem.Items.Contains(SelectedItem))
{
tabControl1.SelectedItem = tabControl1.Items //Changes tab according to TreeView
.OfType<TabItem>().SingleOrDefault(n => n.Header.ToString() == SelectedItem.Header.ToString());
}
与我这次所做的不同之处在于,我选择的tabItem 的header 是由string 和integer 组成的。
例如:选定的TreeViewItem 将始终有一个名为"Arrival" 的header,但tabItem 的header 将具有类似"Arrival" + integer 的形式。 integer 值将来自父节点的header。
对于这个过程,我认为我首先需要获取父节点的 header 值,因为它包含我需要的 integer 值。然后我需要以某种方式修改上面的代码以查询具有header 的节点,例如"Arrival" + parentHeader。
我该如何做这样的事情?
谢谢。
更新
我当前的代码,使用@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<TabItem>().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: 因为“到达”节点是我用作父节点的节点的孙子节点,所以我已将第一行中的 if 语句更改为:
if (parent_TreeViewItem.Items.Contains(SelectedItem.Parent))
【问题讨论】:
-
所以不要使用
n.Header.ToString() = ...,为什么不使用String.StartsWith()。类似n.Header.ToString().StartsWith(SelectedItem.Header.ToString()) -
有不同的“到达”+数字吗?也就是说,您需要知道确切的数字还是“到达”是唯一重要的部分?
-
会有不止一个数字。就像有多个位置的到达标签一样。
标签: c# wpf treeview tabcontrol