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();
};
现在它可以工作了,它并不理想,但它是一个开始。
所以我有一个 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();
};
现在它可以工作了,它并不理想,但它是一个开始。