我正在创建一个应用程序,我在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();
}
}
答案 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)))
...