1

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

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();
    }
}
4

1 回答 1

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)))    
...
于 2012-05-25T07:04:27.020 回答