XmlLayoutSerializer 创建新选项卡而不是加载

XmlLayoutSerializer Creating new tabs instead of loading

所以我有一个 DockingManager 在 xaml 中描述如下:

<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 个带有适当控件的默认布局选项卡。

有人知道发生了什么事吗?我在任何地方都找不到关于它的东西。

对于任何想知道的人,

问题是在填充 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();
        };

现在它可以工作了,它并不理想,但它是一个开始。