在TabControl中阻止页面的多个实例

时间:2012-05-24 13:46:57

标签: c# .net wpf xaml tabcontrol

我正在创建一个应用程序,我在tab控件中打开wpf页面。但是我可以在tabcontrol中一次又一次地打开同一页面。我希望如果一旦打开页面,它就无法再次打开,如果我再次打开它,它应该集中在tabcontrol上。我做了以下代码但没有工作。我正在使用自定义的closableTabItem Usercontrol。

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 个答案:

答案 0 :(得分: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)))    
...