2017-06-05 24 views
0

これはバグか、私はばかだとわかりません。AvalonDockはレイアウトの向きを正しくデシリアライズしません

AvalonDock 3.3.17121.18230を使用

私は上、下、左/中央/右のパネルのシンプルなレイアウトを持っています。 XAMLで指定されたパネルプロパティで初期ロード中はすべて問題ありません。 XmlLayoutSerializerの.Serializeを使用してレイアウトを保存した後、テキストファイルのすべてが正常に表示されます。ただし、Deserializeを使用してレイアウトを再ロードすると、レイアウトが不適切に読み込まれ、中央のLeft/Center/Rightパネルの左右にTopパネルとBottomパネルが配置されます。

私のレイアウトは、Orientation = "Vertical"のLayoutPanelであり、その中にはOrientation = "Horizo​​ntal"の3つのLayoutPanelがあります。最初の水平パネルはTOPだけで、3つ左/中央/右パネル、最後にBOTTOMパネルの水平パネルを含む別の水平パネルが続きます。

RootPanelsのレイアウト方向に関係なく、明示的にverticalと指定されていても、常に水平方向に逆シリアル化されているようです。シリアル化されたファイルの

Initial load from XAML properties - all ok

内容:壊れたレイアウトを保存した後シリアライズされたファイルの

<?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

内容:

<?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> 

あなたが見ることができるように、それはようなものですデシリアライズメソッドは気にしないRootPanel Orientation = "Vertical" RootPanel Orientation = "Horizo​​ntal"

誰かがこれを正気にチェックしてください。私はちょうどXAMLのプロパティからロードされている状態を保存しようとしている、私はバグだと思うだろう。ここで

は私の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> 

コードビハインド

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

答えて

0

ツールキットV3.4は、すでにデシリアライズ時に垂直方向の修正を持っています。 Toolkit v3.4は、2017年6月5日に利用可能です。 私はそれを試してみることをお勧めします。

---- 複数のコントロール、機能、更新と私が今まで使用AvalonDocksは前木曜日だった、この問題に遭遇したXceed Toolkit Plus for WPF

+0

だから、奇妙な、初めてと技術サポートを取得し、それが今日のリリースで修正されています。しかし、Xceed.Wpf.Toolkitは依存関係ですが、Nugetパッケージがないので、更新がコードを壊すだけなので、彼らはうんざりしていると思います。 – z0nghits

+0

"Extended.Wpf.Toolkit"のナゲットパッケージを手動で追加する必要がありましたが、うまくいきました。更新されたAvalonDockのnugetパッケージはそれを依存関係としてリストアップしましたが、それを持ち込んでいませんでした。 – z0nghits

関連する問題