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

时间:2017-04-25 19:23:11

标签: c# wpf mvvm avalondock

所以我在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个默认布局标签和正确的控件。

有人知道发生了什么事吗?我无论如何都找不到它。

1 个答案:

答案 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();
        };

现在它有效,它不是理想的,但它是一个开始。