How to set TabControlExt default at either runtime or design time when you don't explicitly define it in XAML
Please can you provide details on how to set the TabControlExt CloseMode default at either runtime or design time. I add new tabs at runtime based on user controls but can't find how to access the TabControlExt as I don't specify this myself.
My aim is to delete children rather than hide them
I add tabs like this (TableEditor is a User Control):
var newTable = new TableEditor(_selectedTableName) { Name = "TableEditor" + _selectedTableName };
TablesDockingManager.BeginInit();
DockingManager.SetDockingManager(newTable, TablesDockingManager);
DockingManager.SetHeader(newTable, "Table " + _selectedTableName);
DockingManager.SetState(newTable, DockState.Document);
DockingManager.SetDesiredMinWidthInDockedMode(newTable, 200);
TablesDockingManager.BeginInit();
DockingManager.SetDockingManager(newTable, TablesDockingManager);
DockingManager.SetHeader(newTable, "Table " + _selectedTableName);
DockingManager.SetState(newTable, DockState.Document);
DockingManager.SetDesiredMinWidthInDockedMode(newTable, 200);
TablesDockingManager.Children.Add(newTable);
TablesDockingManager.EndInit();
TablesDockingManager.EndInit();
I tried following the notes here: https://www.syncfusion.com/kb/3605/how-to-update-the-tabitemcollection-when-any-one-of-its-tabitem-gets-closed
But this is aimed at having the TabControlExt defined at design time
thanks
Craig
SIGN IN To post a reply.
10 Replies
VR
Vijayalakshmi Roopkumar
Syncfusion Team
May 10, 2016 12:23 PM UTC
Hi Craig,
Thank you for using Syncfusion Products.
By default, TabItemExt in TabControlExt will not be removed from memory when we close the TabItem and its instances are maintained in memory. To clear the TabItemExt instance from memory, we need to set CloseMode as Delete. But it will not remove the child from Children collection of DockingManager. We can remove the child from Children collection of DockingManager by removing it from the children collection manually when the DockState is changed to Hidden. Please refer to the following code example.
DockingManager as shown in the following code example:
Thank you for using Syncfusion Products.
By default, TabItemExt in TabControlExt will not be removed from memory when we close the TabItem and its instances are maintained in memory. To clear the TabItemExt instance from memory, we need to set CloseMode as Delete. But it will not remove the child from Children collection of DockingManager. We can remove the child from Children collection of DockingManager by removing it from the children collection manually when the DockState is changed to Hidden. Please refer to the following code example.
DockingManager as shown in the following code example:
| private void TableDockingManager_DockStateChanged(FrameworkElement sender, DockStateEventArgs e) { if(e.NewState == DockState.Hidden) { // Used to remove the children from the DockingManager TableDockingManager.Children.Remove(sender); } } |
Please find the sample from the following link:
Sample: TabControlExt_124023
Regards,
Vijayalakshmi V.R.
CG
Craig Greenway
May 10, 2016 02:35 PM UTC
Thank you
CG
Craig Greenway
May 10, 2016 06:05 PM UTC
Sorry, I wanted to check a window is allowed to close before I close it so implemented the OnDockStateChanging, but setting e.Cancel to true still closes document, should the following prevent the document closing?
private void DockingManager_OnDockStateChanging(FrameworkElement sender, DockStateChangingEventArgs e)
{
//hidden tabs will be removed completely, but check if need to save first
if (e.TargetState == DockState.Hidden)
{
if (sender.GetType() == typeof(TableEditor))
{
e.Cancel = true;
}
}
}
{
//hidden tabs will be removed completely, but check if need to save first
if (e.TargetState == DockState.Hidden)
{
if (sender.GetType() == typeof(TableEditor))
{
e.Cancel = true;
}
}
}
VR
Vijayalakshmi Roopkumar
Syncfusion Team
May 11, 2016 09:05 AM UTC
Hi Craig,
In our DockingManager, we can restrict the closing of the Document children by handling the CloseButtonClick event. To prevent the Dock window from closing, the WindowClosing Event can be used. The code example below depicts the same.
In our DockingManager, we can restrict the closing of the Document children by handling the CloseButtonClick event. To prevent the Dock window from closing, the WindowClosing Event can be used. The code example below depicts the same.
| private void TableDockingManager_CloseButtonClick(object sender, CloseButtonEventArgs e) { //Handles the closing of Document child e.Cancel = true; } |
The same has been demonstrated in our sample, please download it from the following location:
Sample: TabControlExt_124023_Modified
Sample: TabControlExt_124023_Modified
Regards,
Vijayalakshmi V.R.
CG
Craig Greenway
May 12, 2016 05:02 AM UTC
Hello,
The CloseButtonClick event is great when you close one document, but I was using the OnDockStateChanging e.Cancel intentionally as if you right click, close all for example the CloseButtonClick doesn't get fired. I need an event when closing all where I can cancel the closing process. Setting OnDockStateChanging e.Cancel to True should work but doesn't?
CG
Craig Greenway
May 12, 2016 05:17 AM UTC
So here is a visual of what is happening when you set e.Cancel to true in the OnDockStateChanging event. The docked tab becomes half-closed, half-open. In the bottom screenshot you can see the rounded border. If I try add a new window, the old one is still present but you can't dock it. As a reminder, the docked window is based on a simple user control. Hope this helps?

VR
Vijayalakshmi Roopkumar
Syncfusion Team
May 13, 2016 12:41 PM UTC
Hi Craig,
Query#1: The CloseButtonClick event is great when you close one document, but I was using the OnDockStateChanging e.Cancel intentionally as if you right click, close all for example the CloseButtonClick doesn't get fired. I need an event when closing all where I can cancel the closing process. Setting OnDockStateChanging e.Cancel to True should work but doesn't?
To cancel the closing of all document tabs in DockingManager, you can use the DocumentClosing event of DocumentContainer. The same has depicted in the following code:
Query#1: The CloseButtonClick event is great when you close one document, but I was using the OnDockStateChanging e.Cancel intentionally as if you right click, close all for example the CloseButtonClick doesn't get fired. I need an event when closing all where I can cancel the closing process. Setting OnDockStateChanging e.Cancel to True should work but doesn't?
To cancel the closing of all document tabs in DockingManager, you can use the DocumentClosing event of DocumentContainer. The same has depicted in the following code:
| (TableDockingManager.DocContainer as DocumentContainer).Loaded += MainWindow_Loaded; void MainWindow_Loaded(object sender, RoutedEventArgs e) { (TableDockingManager.DocContainer as DocumentContainer).DocumentClosing += MainWindow_DocumentClosing; } void MainWindow_DocumentClosing(object sender, CancelingRoutedEventArgs e) { e.Cancel = true; } |
Query#2:So here is a visual of what is happening when you set e.Cancel to true in the OnDockStateChanging event. The docked tab becomes half-closed, half-open. In the bottom screenshot you can see the rounded border. If I try add a new window, the old one is still present but you can't dock it. As a reminder, the docked window is based on a simple user control. Hope this helps?
We have tried closing the document and docked window by setting e.Cancel to true in DockStateChanging event, but we were unable to replicate the half closed and half-open issue. Could you please get back to us with modified sample reproducing the issue along with replication steps, it would be helpful for us to proceed further on this.
Sample:TabControlExt_124023_ModifiedNEW
Regards,
Vijayalakshmi V.R.
CG
Craig Greenway
May 14, 2016 07:34 AM UTC
Hello,
The DocumentClosing is the correct place for me to handle the checking if you can close the window, thank you for this. In terms of the screenshot, I'm guessing this was due to DocumentClosing not being cancelled so part of the TDI window was being closed before the OnDockStateChanging event fired. I have all the information I need now.
When I looked in the sample project for tabs, there was no code for handling closing window events. Perhaps if this thread could be used to add additional code to the sample project (for example in the text editor if you change it, mark the window Dirty and check when closing) this could help others in the future
thanks again
Craig
CG
Craig Greenway
May 14, 2016 09:06 AM UTC
Spoke too soon!
If you have 2 TDI windows open and right-click, close all, the DocumentClosing event is called twice per TDI window (so 4 times). With 3 windows open, you get 6 DocumentClosing events. I am really struggling to find an event where I can prompt the user to see if they want to close the TDI window, but only prompt them once.
VJ
Victory Jessie Selvam D
Syncfusion Team
May 16, 2016 08:07 AM UTC
Hi Craig,
Query #1: In terms of the screenshot, I'm guessing this was due to DocumentClosing not being cancelled so part of the TDI window was being closed before the OnDockStateChanging event fired. I have all the information I need now.
If document tab closing is cancelled using DockStateChanging event, then tab item will be removed from TabControlExt before DockStateChanging event cancels the item closing. So it causes TDI windows to remain half closed and half open.We suggest you to use DocumentClosing event to cancel the document tab closing.
Query #2: When I looked in the sample project for tabs, there was no code for handling closing window events. Perhaps if this thread could be used to add additional code to the sample project (for example in the text editor if you change it, mark the window Dirty and check when closing) this could help others in the future.
We have modified the sample using checkbox in UserControl(TableEditor) which determines whether a document tab can be closed or not. You can download the sample from following link:
Sample: TabControlExt_124023_DocumentClosing
Query #3: If you have 2 TDI windows open and right-click, close all, the DocumentClosing event is called twice per TDI window (so 4 times). With 3 windows open, you get 6 DocumentClosing events. I am really struggling to find an event where I can prompt the user to see if they want to close the TDI window, but only prompt them once.
We were able to reproduce the reported issue "DocumentClosing event fires twice for a document while using CloseAll option" and logged a defect report for this. A support incident to track the status of this defect has been created under your account. Please log on to our support website to check for further updates
https://www.syncfusion.com/account/login?ReturnUrl=%2fsupport%2fdirecttrac%2fincidents
Please let us know if you have any questions.
Regards,
Jessie
Query #1: In terms of the screenshot, I'm guessing this was due to DocumentClosing not being cancelled so part of the TDI window was being closed before the OnDockStateChanging event fired. I have all the information I need now.
If document tab closing is cancelled using DockStateChanging event, then tab item will be removed from TabControlExt before DockStateChanging event cancels the item closing. So it causes TDI windows to remain half closed and half open.We suggest you to use DocumentClosing event to cancel the document tab closing.
Query #2: When I looked in the sample project for tabs, there was no code for handling closing window events. Perhaps if this thread could be used to add additional code to the sample project (for example in the text editor if you change it, mark the window Dirty and check when closing) this could help others in the future.
We have modified the sample using checkbox in UserControl(TableEditor) which determines whether a document tab can be closed or not. You can download the sample from following link:
Sample: TabControlExt_124023_DocumentClosing
Query #3: If you have 2 TDI windows open and right-click, close all, the DocumentClosing event is called twice per TDI window (so 4 times). With 3 windows open, you get 6 DocumentClosing events. I am really struggling to find an event where I can prompt the user to see if they want to close the TDI window, but only prompt them once.
We were able to reproduce the reported issue "DocumentClosing event fires twice for a document while using CloseAll option" and logged a defect report for this. A support incident to track the status of this defect has been created under your account. Please log on to our support website to check for further updates
https://www.syncfusion.com/account/login?ReturnUrl=%2fsupport%2fdirecttrac%2fincidents
Please let us know if you have any questions.
Regards,
Jessie
SIGN IN To post a reply.
- 10 Replies
- 3 Participants
-
CG Craig Greenway
- May 10, 2016 05:47 AM UTC
- May 16, 2016 08:07 AM UTC