2013-08-16 23 views
1

此問題與this question類似,我今天早些時候問過。不同之處在於,現在我想刪除一個標籤項目,它是由nameheader引用的。我能否以類似於我在這個問題上得到的答案的方式撥打Remove如何刪除基於名稱或標題的選項卡項目

這是我已經試過:

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

我可以使用類似this?如果是這樣,怎麼樣?

+2

我強烈建議MVVM作爲WPF的默認思維方式。類似winforms的代碼隱藏類型的黑客和操作過程代碼中的UI元素只會給你帶來痛苦和折磨,以及悲慘的失敗。當你處理'ItemsControl'派生的元素(比如TabControl或者Menu或者ListBox或者ComboBox)時更是如此。 –

+0

你試過了嗎? –

+0

它並不完全正確,因爲'Remove'是一個方法組。我會發布我的嘗試。 –

回答

1

我對wpf的移除了解不多,但是這段代碼比您發佈的內容更可能工作。刪除是一種方法,您無法爲其分配值,因此您必須隔離要刪除的項目,檢查並確保它不爲空,然後將該對象傳遞給方法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

+0

好的,據我所知,工作,非常感謝! –

+0

我可以將'Name'更改爲'Header'並使用此代碼通過'Header'引用'tabItem'嗎? –

+0

這工作完美,謝謝! –

相關問題