【问题标题】:How to delete a Tab Item based off of it's name or header如何根据名称或标题删除选项卡项
【发布时间】:2013-08-17 01:47:05
【问题描述】:

这个问题类似于我今天早些时候问的this question。不同之处在于,现在我想删除由nameheader 引用的选项卡项。我可以像我在这个问题上得到的答案那样打电话给Remove吗?

这是我尝试过的:

tabControl.Items.Remove = tabControl.Items //Changes tab according to TreeView
                        .OfType<TabItem>().SingleOrDefault(n => n.Name == stringValue);

我可以使用this 之类的东西吗?如果有,怎么做?

【问题讨论】:

  • 我强烈建议将 MVVM 作为 WPF 的默认思维方式。类似winforms的代码隐藏类型的hack和在程序代码中操纵UI元素只会给你带来痛苦和折磨,折磨和悲惨的失败。当您处理 ItemsControl 派生的元素(例如 TabControl 或 Menu 或 ListBox 或 ComboBox)时更是如此。
  • 它并不完全有效,因为Remove 是一个方法组。我会发布我尝试过的内容。
  • Remove 不是一个属性,你不能给它赋值
  • 真的,投反对票?

标签: c# wpf tabcontrol tabitem


【解决方案1】:

我对从 wpf 中删除了解不多,但是此代码比您发布的代码更有可能起作用。 Remove 是一个方法,你不能给它赋值,所以你必须隔离你要删除的项目,检查它是否为空,然后将对象传递给Remove 方法。

var tabToDelete = tabControl.Items.OfType<TabItem>().SingleOrDefault(n => n.Name == stringValue);
if (tabToDelete != null) // Since you chose to use SingleOrDefault, we have to check to make sure it isn't null before we try to remove it.
tabControl.Items.Remove(tabToDelete);

但是,我强烈建议您查看WPF - Best way to remove an item from the ItemsSource,因为它详细介绍了检查项目是否可以被删除,即使该控件可以使用 Remove 方法。

【讨论】:

  • 我可以将Name 更改为Header 并使用此代码通过Header 引用tabItem 吗?
猜你喜欢
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-19
  • 1970-01-01
  • 1970-01-01
  • 2018-05-12
  • 1970-01-01
相关资源
最近更新 更多