所以我在xaml中有一个像这样描述的DockingManager:
<ad:DockingManager
x:Name="DockingManager"
Margin="5"
DocumentHeaderTemplate="{DynamicResource DocumentHeaderTemplate}"
DocumentPaneControlStyle="{DynamicResource DocumentPaneControlStyle}"
DocumentsSource="{Binding TabControlItems, Source={StaticResource Locator}}"
LayoutItemContainerStyle="{DynamicResource LayoutItemContainerStyle}" />
我试图加载我的布局,如
var dockingManager = mw?.DockingManager;
if (dockingManager == null)
{
return null;
}
if (!File.Exists(@"Settings\TabLayout.config"))
{
File.Create(@"Settings\TabLayout.config");
}
var serializer = new XmlLayoutSerializer(dockingManager);
serializer.LayoutSerializationCallback += (s, args) => { };
serializer.Deserialize(@"Settings\TabLayout.config");
但是不是加载我期望的,它总是加载额外的标签。 IE浏览器。如果我保存3个标签,然后加载布局,我将获得6个标签,3个空白的标签,我保存的布局,3个默认布局标签和正确的控件。
有人知道发生了什么事吗?我无论如何都找不到它。
答案 0 :(得分:0)
对任何想知道的人,
问题是我的布局是在填充DocumentsSource之前加载的,所以它添加了空标签以使其工作。我尝试在WindowLoad上设置我的布局反序列化,但即使这样结果太快了,所以我有这个计时器:
mainWindow.Loaded += (sender, args) =>
{
// I couldn't find a proper place to put this.
// I need an event after 100% of all setup is completed
var timer = new DispatcherTimer()
{
Interval = TimeSpan.FromSeconds(3)
};
timer.Tick += (s, e) =>
{
DockingManagerDeserialize(mainWindow);
timer.Stop();
};
timer.Start();
};
现在它有效,它不是理想的,但它是一个开始。