2017-06-05 7 views
0

Dies ist frustrierend, versuchen herauszufinden, ob das ein Fehler ist oder ich ein Idiot bin.AvalonDock nicht Deserializing LayoutRoot Ausrichtung richtig

Mit AvalonDock 3.3.17121.18230

Ich habe ein einfaches Layout von oben, unten, links/Mitte/Rechts-Panels. Beim erstmaligen Laden mit den in XAML angegebenen Panel-Eigenschaften ist alles in Ordnung. Nach dem Speichern des Layouts mit der .Serialize von XmlLayoutSerializer sieht alles in der Textdatei gut aus. Beim erneuten Laden des Layouts mit Deserialize wird das Layout jedoch nicht korrekt geladen und die oberen und unteren Bereiche links und rechts von den mittleren linken/mittleren/rechten Bereichen platziert.

Mein Layout ist ein LayoutPanel mit Orientation = "Vertical", dann sind darin 3 LayoutPanels mit Orientation = "Horizontal" verschachtelt. Die erste horizontale Platte ist nur die Oberseite, gefolgt von einer weiteren horizontalen Platte, die die 3 linken/mittleren/rechten Platten enthält, und dann die letzte horizontale Platte, die die UNTERE Platte darstellt.

Es scheint, dass es unabhängig von der Layoutausrichtung des Rootpanels es immer als horizontal deserialisiert, obwohl es ausdrücklich vertikal sagt.

Initial load from XAML properties - all ok

Inhalt der serialisierten Datei:

<?xml version="1.0" encoding="utf-8"?> 
<LayoutRoot> 
    <RootPanel Orientation="Vertical"> 
    <LayoutPanel Orientation="Horizontal"> 
     <LayoutAnchorablePane DockHeight="100"> 
     <LayoutAnchorable AutoHideMinWidth="100" AutoHideMinHeight="100" Title="ShellTop" IsSelected="True" ContentId="ShellTop" CanClose="False" /> 
     </LayoutAnchorablePane> 
    </LayoutPanel> 
    <LayoutPanel Orientation="Horizontal"> 
     <LayoutAnchorablePane> 
     <LayoutAnchorable AutoHideMinWidth="100" AutoHideMinHeight="100" Title="ShellLeft" IsSelected="True" ContentId="ShellLeft" CanClose="False" /> 
     </LayoutAnchorablePane> 
     <LayoutAnchorablePane> 
     <LayoutAnchorable AutoHideMinWidth="100" AutoHideMinHeight="100" Title="ShellMain" IsSelected="True" ContentId="ShellMain" CanClose="False" /> 
     </LayoutAnchorablePane> 
     <LayoutAnchorablePane> 
     <LayoutAnchorable AutoHideMinWidth="100" AutoHideMinHeight="100" Title="ShellRight" IsSelected="True" ContentId="ShellRight" CanClose="False" /> 
     </LayoutAnchorablePane> 
    </LayoutPanel> 
    <LayoutPanel Orientation="Horizontal"> 
     <LayoutAnchorablePane> 
     <LayoutAnchorable AutoHideMinWidth="100" AutoHideMinHeight="100" Title="ShellBottom" IsSelected="True" ContentId="ShellBottom" CanClose="False" /> 
     </LayoutAnchorablePane> 
    </LayoutPanel> 
    </RootPanel> 
    <TopSide /> 
    <RightSide /> 
    <LeftSide /> 
    <BottomSide /> 
    <FloatingWindows /> 
    <Hidden /> 
</LayoutRoot> 

After serializing, then deserializing - not ok

Inhalt der serialisierten Datei nach dem zerbrochenen Layout zu speichern:

<?xml version="1.0" encoding="utf-8"?> 
<LayoutRoot> 
    <RootPanel Orientation="Horizontal"> 
    <LayoutPanel Orientation="Horizontal"> 
     <LayoutAnchorablePane DockHeight="100"> 
     <LayoutAnchorable AutoHideMinWidth="100" AutoHideMinHeight="100" Title="ShellTop" IsSelected="True" ContentId="ShellTop" CanClose="False" /> 
     </LayoutAnchorablePane> 
    </LayoutPanel> 
    <LayoutPanel Orientation="Horizontal"> 
     <LayoutAnchorablePane> 
     <LayoutAnchorable AutoHideMinWidth="100" AutoHideMinHeight="100" Title="ShellLeft" IsSelected="True" ContentId="ShellLeft" CanClose="False" /> 
     </LayoutAnchorablePane> 
     <LayoutAnchorablePane> 
     <LayoutAnchorable AutoHideMinWidth="100" AutoHideMinHeight="100" Title="ShellMain" IsSelected="True" ContentId="ShellMain" CanClose="False" /> 
     </LayoutAnchorablePane> 
     <LayoutAnchorablePane> 
     <LayoutAnchorable AutoHideMinWidth="100" AutoHideMinHeight="100" Title="ShellRight" IsSelected="True" ContentId="ShellRight" CanClose="False" /> 
     </LayoutAnchorablePane> 
    </LayoutPanel> 
    <LayoutPanel Orientation="Horizontal"> 
     <LayoutAnchorablePane> 
     <LayoutAnchorable AutoHideMinWidth="100" AutoHideMinHeight="100" Title="ShellBottom" IsSelected="True" ContentId="ShellBottom" CanClose="False" /> 
     </LayoutAnchorablePane> 
    </LayoutPanel> 
    </RootPanel> 
    <TopSide /> 
    <RightSide /> 
    <LeftSide /> 
    <BottomSide /> 
    <FloatingWindows /> 
    <Hidden /> 
</LayoutRoot> 

Wie Sie sehen können, ist es wie das ist Deserialize-Methode ist es egal dass RootPanel Orientation = "Vertical" und immer lädt es wie es ist RootPanel Orientation = "Horizontal"

Kann jemand bitte versuchen, dies zu überprüfen, überprüfen Sie mich, oder wenn ich über diese falsche gehe lass es mich wissen. Ich versuche nur, den Status zu speichern, der aus den XAML-Eigenschaften geladen wird, ich würde denken, dass dies ein Fehler ist.

Hier ist die Grid-Steuerung meines XAML

<Grid> 

     <Grid.RowDefinitions> 
      <RowDefinition Height="20"/> 
      <RowDefinition Height="20"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 

     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="1*"></ColumnDefinition> 
      <ColumnDefinition Width="1*"></ColumnDefinition> 
     </Grid.ColumnDefinitions> 

     <Button Grid.Row="0" Grid.Column="0" Content="Save Layout" Click="SaveButton_Click"/> 
     <Button Grid.Row="0" Grid.Column="1" Content="Restore Layout" Click="RestoreButton_Click"/> 
     <Button Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Content="Default Layout" Click="DefaultButton_Click"/> 


     <avalonDock:DockingManager AllowMixedOrientation="True" x:Name="DManager" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Loaded="dockManager_Loaded"> 
      <avalonDock:LayoutRoot> 

       <avalonDock:LayoutPanel Orientation="Vertical"> 

        <avalonDock:LayoutPanel Orientation="Horizontal"> 

         <avalonDock:LayoutAnchorablePane DockHeight="100"> 
         <avalonDock:LayoutAnchorable Title="ShellTop" ContentId="ShellTop"> 
          <Button Content="TOP"/> 
         </avalonDock:LayoutAnchorable> 
        </avalonDock:LayoutAnchorablePane> 

        </avalonDock:LayoutPanel> 



        <avalonDock:LayoutPanel Orientation="Horizontal"> 

         <avalonDock:LayoutAnchorablePane> 
          <avalonDock:LayoutAnchorable Title="ShellLeft" ContentId="ShellLeft"> 
           <Button Content="LEFT"/> 
          </avalonDock:LayoutAnchorable> 
        </avalonDock:LayoutAnchorablePane> 

        <avalonDock:LayoutAnchorablePane> 
          <avalonDock:LayoutAnchorable Title="ShellMain" ContentId="ShellMain"> 
           <Button Content="MIDDLE"/> 
          </avalonDock:LayoutAnchorable> 
        </avalonDock:LayoutAnchorablePane> 

         <avalonDock:LayoutAnchorablePane> 
          <avalonDock:LayoutAnchorable Title="ShellRight" ContentId="ShellRight"> 
           <Button Content="RIGHT"/> 
          </avalonDock:LayoutAnchorable> 
         </avalonDock:LayoutAnchorablePane> 

        </avalonDock:LayoutPanel> 


        <avalonDock:LayoutPanel Orientation="Horizontal"> 

          <avalonDock:LayoutAnchorablePane> 
         <avalonDock:LayoutAnchorable Title="ShellBottom" ContentId="ShellBottom"> 
          <Button Content="BOTTOM"/> 
         </avalonDock:LayoutAnchorable> 
        </avalonDock:LayoutAnchorablePane> 

        </avalonDock:LayoutPanel> 



       </avalonDock:LayoutPanel> 


      </avalonDock:LayoutRoot> 
     </avalonDock:DockingManager> 
    </Grid> 

-Code-Behind

private void SaveButton_Click(object sender, RoutedEventArgs e) 
{ 
    XmlLayoutSerializer layoutSerializer = new XmlLayoutSerializer(DManager); 
    using (var writer = new StreamWriter("C:/Users/xxx/Desktop/test.txt")) 
    { 
     layoutSerializer.Serialize(writer); 
    } 
} 

private void RestoreButton_Click(object sender, RoutedEventArgs e) 
{ 
    XmlLayoutSerializer layoutSerializer = new XmlLayoutSerializer(DManager); 
    using (var reader = new StreamReader("C:/Users/xxx/Desktop/test.txt")) 
    { 
     layoutSerializer.Deserialize(reader); 
    } 
} 

Antwort

0

Toolkit v3.4 hat bereits ein Update für eine vertikale Ausrichtung auf Deserialisieren. Toolkit v3.4 ist verfügbar heute, 5. Juni 2017. Ich schlage vor, Sie versuchen es mit.

---- Mehr Kontrollen, Features, Updates und technischen Support mit Xceed Toolkit Plus for WPF

+0

So bizarr, erstem Mal, dass ich je benutzte AvalonDocks war am vergangenen Donnerstag, in diese Ausgabe lief, und es ist in der heutigen Version behebt . Ich denke jedoch, dass sie versagt haben, weil sie behauptet, Xceed.Wpf.Toolkit sei eine Abhängigkeit, aber es gibt kein Nuget-Paket, so dass das Update nur den Code bricht. – z0nghits

+0

Ich habe es funktioniert, obwohl ich manuell das nuget-Paket für "Extended.Wpf.Toolkit" hinzufügen musste. Das aktualisierte nuget-Paket AvalonDock hat es als Abhängigkeit aufgelistet, führt es jedoch nicht ein. – z0nghits

Verwandte Themen