繁体   English   中英

WPF / C#:如何在TabControl中引用TabItems?

[英]WPF/C#: How does one reference TabItems inside a TabControl?

我确信有一些我想念的简单,但我必须承认,此时我不知所措。

我以编程方式将TabItems添加到我的主TabControl,每个用户选择打开一个帐户。 在创建和添加新的TabItem之前,我想检查用户是否已在另一个选项卡中打开该帐户。 我不想最终打开两个相同的标签。

这是我最初编写的代码。 希望它能让您了解我想要实现的目标。

    if (tab_main.Items.Contains(accountNumber))
    {
        tab_main.SelectedIndex = tab_main.Items.IndexOf(accountNumber);
    }
    else
    {
        Search s = new Search(queryResults, searchText);
        TabItem tab_search = new TabItem();
        tab_search.Header = searchString;
        tab_search.Name = accountNumber;
        tab_search.Content = s;
        tab_main.Items.Add(tab_search);
    }

当然这不能正常工作。 在WinForms中,TabControl有一个带有ContainsKey方法的TabPages集合,我可以用它来搜索TabPage的名称。 我没有得到Items.Contains()方法正在寻找的东西,因为它只指定一个对象作为参数,并且不引用该项目的名称!

非常感谢任何和所有的帮助。

谢谢!

Contains()方法正在寻找您传递您正在寻找的实际TabItem ,因此它不会帮助您。 但这会奏效:

var matchingItem =
  tab_main.Items.Cast<TabItem>()
    .Where(item => item.Name == accountNumber)
    .FirstOrDefault();

if(matchingItem!=null)
  tab_main.SelectedItem = matchingItem;
else
  ...

谢谢你的回复! 在编辑之前它没有用,我最终提出了另一个类似的解决方案。 当然让我思考正确的方向! 我还不太熟悉LINQ和lambda表达式。

如果其他人正在寻找解决方案,这对我也有用:

var matchingItem = 
    from TabItem t in tab_main.Items where t.Name == searchHash select t;

if (matchingItem.Count() != 0)
    tab_main.SelectedItem = matchingItem.ElementAt(0);
else
    ...

最后一个问题,如果有人正在阅读这个...是否有更优雅的方法从matchItem通过引用name属性与假设正确的元素位于0位置来选择元素?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM