2012-05-24 58 views
1

我正在製作一個應用程序,其中我在選項卡控件中打開wpf頁面。但是我可以在tabcontrol中一次又一次打開相同的頁面。我想,如果一旦打開頁面,它不能再次打開,如果我嘗試再次打開,它應該關注tabcontrol。我做了下面的代碼,但沒有工作。我正在使用自定義closableTabItem用戶控件。防止TabControl中的頁面的多個實例

private void Set_Fee_Click(object sender, RoutedEventArgs e) 
{ 
    // Adding page to frame and then adding that frame to tab item and then adding tab item to main tab. 
    FeeStructure feePage = new FeeStructure(); 
    _closableTab = new ClosableTabItem(); 
    _formFrame = new Frame(); 
    _formFrame.Content = feePage; 
    _closableTab.Content = _formFrame; 
    _closableTab.Header = "Set Fee Structure"; 

    if (!mainTab.Items.Contains(_closableTab)) 
    { 
     mainTab.Items.Add(_closableTab); 
     _closableTab.Focus(); 
    } 
    else 
    { 
     _closableTab.Focus(); 
    } 
} 

private void Database_RecoveryBackup_Click(object sender, RoutedEventArgs e) 
{ 
    // Adding page to frame and then adding that frame to tab item and then adding tab item to main tab. 
    DbRecoveryBackup dbRecBack = new DbRecoveryBackup(); 
    _closableTab = new ClosableTabItem(); 
    _formFrame = new Frame(); 
    _formFrame.Content = dbRecBack; 
    _closableTab.Content = _formFrame; 
    _closableTab.Header = "Data Base"; 

    if (!mainTab.Items.Contains(_closableTab)) 
    { 
     mainTab.Items.Add(_closableTab); 
     _closableTab.Focus(); 
    } 
    else 
    { 
     _closableTab.Focus(); 
    } 
} 

回答

1

它永遠不會發生,你想要什麼,因爲你要創建ClosableTabItem每次的新實例,因此它是獨一無二的,每次,所以.Items.Contains絕不會在這種情況下,因爲它使用object.Equals相匹配的項目工作。

現在,既然你的問題時說,你只需要實例ClosableTabItem一個,然後 使用LINQ,如果在項目存在ClosableTabItem類型的任何物品,你可以檢查,

... 
// Here we're checking the array 'Items', 
// if it contains any item whose type is 'ClosableTabItem' 
if (!mainTab.Items.Any(item => item is ClosableTabItem)))  
... 
+0

'f是ClosableTabItem '會工作得更快。或'Items.OfType ()。Any()' – abatishchev

+0

@abatishchev更正。 – Code0987