![Avatar](https://secure.gravatar.com/avatar/36e73515b88ebe6d30d4493553c08a3c.jpg?s=64&d=identicon&r=g)
When saving the DockSiteLayout using the serialize, after restoring the layout, the DocumentWindows no longer have the Close Button on them. I tried changing the value of IsCloseButtonOnTab to true/false on the TabbedMdiHost which now has no effect.
I have the following simple code example to clearly show the problem.
run the sample and click on "Save layout", then "Restore Layout" - the close buttons on the tabs are now gone.
Many Thanks,
Sean.
XAML Code :-
<Window x:Class="ActiProTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindowTest" Height="350" Width="525" xmlns:docking="http://schemas.actiprosoftware.com/winfx/xaml/docking">
<Grid>
<StackPanel>
<TextBox>test</TextBox>
<Button Name="Button1" Click="Button1Click">Change Close Buttons</Button>
<Button Name="Button2" Click="Button2Click">Save Layout</Button>
<Button Name="Button3" Click="Button3Click">Restore Layout</Button>
<docking:DockSite Name="dockSite" HorizontalAlignment="Left" Margin="166,100,0,0" VerticalAlignment="Top" Background="Gray">
<docking:Workspace>
<Grid>
<docking:TabbedMdiHost Name="tabbedMdiHost" IsCloseButtonOnTab="true" IsImageOnTab="True" CanDocumentsCloseOnMiddleClick="True">
<docking:TabbedMdiContainer>
</docking:TabbedMdiContainer>
</docking:TabbedMdiHost>
</Grid>
</docking:Workspace>
</docking:DockSite>
</StackPanel>
</Grid>
</Window>
CodeBehind :-
using System.Windows;
using ActiproSoftware.Windows.Controls.Docking;
using ActiproSoftware.Windows.Controls.Docking.Serialization;
namespace ActiProTest
{
public partial class MainWindow
{
private const string DockSiteLayoutXml = @"c:\temp\docsitelayout.xml";
private const string TestWindow = "testWindow";
public MainWindow()
{
InitializeComponent();
var newDocumentWindow = AddNewDocumentWindow();
dockSite.DocumentWindows.Add(newDocumentWindow);
newDocumentWindow.Activate();
}
private void Button1Click(object sender, RoutedEventArgs e)
{
tabbedMdiHost.IsCloseButtonOnTab = !tabbedMdiHost.IsCloseButtonOnTab;
}
private void Button2Click(object sender, RoutedEventArgs e)
{
var dockSiteLayoutSerializer = new DockSiteLayoutSerializer { SerializationBehavior = DockSiteSerializationBehavior.All };
dockSiteLayoutSerializer.SaveToFile(DockSiteLayoutXml, dockSite);
}
private void Button3Click(object sender, RoutedEventArgs e)
{
for (var index = dockSite.DocumentWindows.Count - 1 ; index >= 0; index--)
{
var documentWindow = dockSite.DocumentWindows[index];
documentWindow.Close();
documentWindow.Destroy();
}
var dockSiteLayoutSerializer = new DockSiteLayoutSerializer
{
DocumentWindowDeserializationBehavior =
DockingWindowDeserializationBehavior.AutoCreate
};
dockSiteLayoutSerializer.DockingWindowDeserializing += OnLayoutSerializerDockingWindowDeserializing;
dockSiteLayoutSerializer.LoadFromFile(DockSiteLayoutXml, dockSite);
}
private static void OnLayoutSerializerDockingWindowDeserializing(object sender, DockingWindowDeserializingEventArgs e)
{
if (e.Node.Name == TestWindow)
{
e.Window = AddNewDocumentWindow();
}
}
private static DocumentWindow AddNewDocumentWindow()
{
var documentWindow = new DocumentWindow { Title = TestWindow, Name = TestWindow };
return documentWindow;
}
}
}
I have the following simple code example to clearly show the problem.
run the sample and click on "Save layout", then "Restore Layout" - the close buttons on the tabs are now gone.
Many Thanks,
Sean.
XAML Code :-
<Window x:Class="ActiProTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindowTest" Height="350" Width="525" xmlns:docking="http://schemas.actiprosoftware.com/winfx/xaml/docking">
<Grid>
<StackPanel>
<TextBox>test</TextBox>
<Button Name="Button1" Click="Button1Click">Change Close Buttons</Button>
<Button Name="Button2" Click="Button2Click">Save Layout</Button>
<Button Name="Button3" Click="Button3Click">Restore Layout</Button>
<docking:DockSite Name="dockSite" HorizontalAlignment="Left" Margin="166,100,0,0" VerticalAlignment="Top" Background="Gray">
<docking:Workspace>
<Grid>
<docking:TabbedMdiHost Name="tabbedMdiHost" IsCloseButtonOnTab="true" IsImageOnTab="True" CanDocumentsCloseOnMiddleClick="True">
<docking:TabbedMdiContainer>
</docking:TabbedMdiContainer>
</docking:TabbedMdiHost>
</Grid>
</docking:Workspace>
</docking:DockSite>
</StackPanel>
</Grid>
</Window>
CodeBehind :-
using System.Windows;
using ActiproSoftware.Windows.Controls.Docking;
using ActiproSoftware.Windows.Controls.Docking.Serialization;
namespace ActiProTest
{
public partial class MainWindow
{
private const string DockSiteLayoutXml = @"c:\temp\docsitelayout.xml";
private const string TestWindow = "testWindow";
public MainWindow()
{
InitializeComponent();
var newDocumentWindow = AddNewDocumentWindow();
dockSite.DocumentWindows.Add(newDocumentWindow);
newDocumentWindow.Activate();
}
private void Button1Click(object sender, RoutedEventArgs e)
{
tabbedMdiHost.IsCloseButtonOnTab = !tabbedMdiHost.IsCloseButtonOnTab;
}
private void Button2Click(object sender, RoutedEventArgs e)
{
var dockSiteLayoutSerializer = new DockSiteLayoutSerializer { SerializationBehavior = DockSiteSerializationBehavior.All };
dockSiteLayoutSerializer.SaveToFile(DockSiteLayoutXml, dockSite);
}
private void Button3Click(object sender, RoutedEventArgs e)
{
for (var index = dockSite.DocumentWindows.Count - 1 ; index >= 0; index--)
{
var documentWindow = dockSite.DocumentWindows[index];
documentWindow.Close();
documentWindow.Destroy();
}
var dockSiteLayoutSerializer = new DockSiteLayoutSerializer
{
DocumentWindowDeserializationBehavior =
DockingWindowDeserializationBehavior.AutoCreate
};
dockSiteLayoutSerializer.DockingWindowDeserializing += OnLayoutSerializerDockingWindowDeserializing;
dockSiteLayoutSerializer.LoadFromFile(DockSiteLayoutXml, dockSite);
}
private static void OnLayoutSerializerDockingWindowDeserializing(object sender, DockingWindowDeserializingEventArgs e)
{
if (e.Node.Name == TestWindow)
{
e.Window = AddNewDocumentWindow();
}
}
private static DocumentWindow AddNewDocumentWindow()
{
var documentWindow = new DocumentWindow { Title = TestWindow, Name = TestWindow };
return documentWindow;
}
}
}