LayoutDocumentPane이있는 단순한 AvalonDock 응용 프로그램. AvalonDock 2.0 : Deserialize 레이아웃 후에 LayoutDocument가 추가되지 않음
XAML :
는<Window x:Name="MainWindow1" x:Class="AvalonTest2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:xcad="http://schemas.xceed.com/wpf/xaml/avalondock"
Title="MainWindow" Height="350" Width="525" Loaded="MainWindow1_Loaded">
<Grid Name="MainGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<ToolBar Grid.Row="0" Grid.Column="0">
<Button Content="New Tab" Margin="10,0,0,0" Click="NewTabClick"/>
<Button Content="Save layout" Margin="10,0,0,0" Click="Button_Click"/>
</ToolBar>
<xcad:DockingManager x:Name="dockManager" Grid.Row="1">
<xcad:LayoutRoot x:Name="_layoutRoot">
<xcad:LayoutPanel Orientation="Horizontal" x:Name="_layoutPanel">
<xcad:LayoutDocumentPane x:Name="workSpace">
<xcad:LayoutDocument ContentId="dummy" Title="Dummy" >
<Button x:Name="dummyButton" Content="Dummy Content" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</xcad:LayoutDocument>
</xcad:LayoutDocumentPane>
</xcad:LayoutPanel>
</xcad:LayoutRoot>
</xcad:DockingManager>
</Grid>
</Window>
코드 :
using System;
using System.IO;
using System.Windows;
using Xceed.Wpf.AvalonDock.Layout;
using Xceed.Wpf.AvalonDock.Layout.Serialization;
namespace AvalonTest2
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void NewTabClick(object sender, RoutedEventArgs e)
{
var ld = new LayoutDocument();
var x = new Random().Next().ToString();
ld.Title = x;
ld.ContentId = x;
workSpace.Children.Add(ld);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var layoutSerial = new XmlLayoutSerializer(dockManager);
layoutSerial.Serialize("layout.xml");
}
private void MainWindow1_Loaded(object sender, RoutedEventArgs e)
{
if (File.Exists("layout.xml"))
{
// var serializer = new XmlLayoutSerializer(dockManager);
// serializer.Deserialize("layout.xml");
}
}
}
}
I를 누르면 "새 탭"버튼 모든 것이 괜찮 : 새로운 탭이 나타납니다.
프로그램을 다시 시작하고 레이아웃을 저장하고 ("레이아웃 저장"버튼), 프로그램을 닫고 비 직렬화 라인에 주석을 제거합니다.
프로그램을 시작하고 "새 탭"을 누르면 아무 탭도 표시되지 않습니다. LayoutDocumentPane (workSpace) 내부를 볼 것입니다. "Children"속성은 새 Documents로 채워집니다.
무엇이 잘못 되었나요?
감사합니다. 나는 우리가 1.x 버전에서 같은 문제가 있다는 것을 알았지 만 잊어 버렸다. :( – Badiboy