2017-04-25 9 views
0

그래서 나는 DockingManager은 다음과 같이 XAML에 설명있어 :XmlLayoutSerializer는

<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"); 

을 내 레이아웃을로드하기 위해 노력하고있어 로드하는 방법에 따라 항상 추가 탭이로드됩니다. 예. 3 개의 탭을 저장하고 레이아웃을로드하면 6 개의 탭, 저장 한 레이아웃이있는 3 개의 빈 탭, 적절한 컨트롤이있는 3 개의 기본 레이아웃 탭이 표시됩니다.

아무도 무슨 일이 일어나고 있는지 아니? 어디서나 그걸 찾을 수는 없습니다.

궁금해 어느

답변

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

를 이제 작동, 그것은 이상적인 아니지만 그 시작.