We use cookies to give you the best experience on our website. If you continue to browse, then you agree to our privacy policy and cookie policy.
Unfortunately, activation email could not send to your email. Please try again.
Syncfusion Feedback

How to set TabControlExt default at either runtime or design time when you don't explicitly define it in XAML

Thread ID:

Created:

Updated:

Platform:

Replies:

124023 May 10,2016 01:47 AM May 16,2016 04:07 AM WPF 10
loading
Tags: DockingManager
Craig Greenway
Asked On May 10, 2016 01:47 AM

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.Children.Add(newTable);
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

Vijayalakshmi Roopkumar [Syncfusion]
Replied On May 10, 2016 08:23 AM

 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:  
 
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.

 


Craig Greenway
Replied On May 10, 2016 10:35 AM

Thank you

Craig Greenway
Replied On May 10, 2016 02:05 PM

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;
                }
            }
        }

Vijayalakshmi Roopkumar [Syncfusion]
Replied On May 11, 2016 05:05 AM

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.  
  

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
 

Regards,
Vijayalakshmi V.R.  
  


Craig Greenway
Replied On May 12, 2016 01:02 AM

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?

Craig Greenway
Replied On May 12, 2016 01:17 AM

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?

Before and after

Vijayalakshmi Roopkumar [Syncfusion]
Replied On May 13, 2016 08:41 AM

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:  
(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.
 


Craig Greenway
Replied On May 14, 2016 03:34 AM

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

Craig Greenway
Replied On May 14, 2016 05:06 AM

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.

Victory Jessie Selvam D [Syncfusion]
Replied On May 16, 2016 04:07 AM

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

CONFIRMATION

This post will be permanently deleted. Are you sure you want to continue?

Sorry, An error occured while processing your request. Please try again later.

Warning Icon You are using an outdated version of Internet Explorer that may not display all features of this and other websites. Upgrade to Internet Explorer 8 or newer for a better experience.Close Icon

;