2011-11-15 27 views
4

我在.NET 3.5上使用AvalonDock v 1.3。如何拉伸/最大化AvalonDock DocumentPane

我在設計時向DockingManager添加了兩個文檔窗格。第一個設置爲可見,第二個隱藏/摺疊(請參閱下面的Visibility =「摺疊」)。

當我啓動應用程序,第二個文檔窗格是可見,這是預期的行爲,但遺憾的是,在顯示的文檔面板不顯示儘管的Horizo​​ntalAlignment設置的事實延伸到主窗口的邊緣到「拉伸」。我將如何去做這個剪輯(或最大化)到允許區域的邊緣?

這是我使用的XAML:

<ad:DockingManager x:Name="dockManager" Grid.Row="1"> 
     <ad:ResizingPanel Name="resizePanel" Orientation="Horizontal"> 
      <ad:DocumentPane Name="visibleDocumentPane" HorizontalAlignment="Stretch" > 
       <ad:DocumentContent Title="A"/> 
       <ad:DocumentContent Title="B"/>      
      </ad:DocumentPane> 
      <ad:DocumentPane Name="collapsedDocumentPane" Visibility="Collapsed"> 
       <ad:DocumentContent Title="A"/> 
       <ad:DocumentContent Title="B"/> 
      </ad:DocumentPane> 
     </ad:ResizingPanel> 
    </ad:DockingManager> 

謝謝, 戴夫

根據要求,這裏是完整的XAML:

<Window x:Class="AvalonDockSampleProject.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:ad="clr-namespace:AvalonDock;assembly=AvalonDock" 
     Title="MainWindow" Height="421" Width="948"> 
    <Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="24"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="24"/> 
    </Grid.RowDefinitions> 
    <Menu> 
     <MenuItem Header="File"> 
      <MenuItem Header="Create DockableContent" Click="CreateDockableContent"/> 
      <MenuItem Header="Layout"> 
       <MenuItem Header="Save" Click="SaveLayout"/> 
       <MenuItem Header="Restore" Click="RestoreLayout"/>      
      </MenuItem> 
      <MenuItem Header="Exit"/> 
     </MenuItem> 
    </Menu> 
    <ad:DockingManager x:Name="dockManager" Grid.Row="1"> 
     <ad:ResizingPanel Name="resizePanel" Orientation="Horizontal"> 
      <ad:DocumentPane Name="visibleDocumentPane" HorizontalAlignment="Stretch" > 
       <ad:DocumentContent Title="A!"/> 
       <ad:DocumentContent Title="B!"/>      
      </ad:DocumentPane> 
      <ad:DocumentPane Name="collapsedDocumentPane" Visibility="Collapsed"> 
       <ad:DocumentContent Title="A"/> 
       <ad:DocumentContent Title="B"/> 
      </ad:DocumentPane> 
      </ad:ResizingPanel> 
     </ad:DockingManager>     
     <StatusBar Grid.Row="2"> 
      <StatusBarItem Content="AvalonDock 1.3 Sample Project"/> 
     </StatusBar> 
    </Grid> 
</Window> 
+0

你能告訴我們窗口的屬性或任何其他包裝?是'DockingManager'嵌套在除了'Window'之外的任何東西嗎? – Shimmy

+0

嗨Shimmy。我已經用MainWindow.xaml的完整內容更新了上面的帖子。其他細節會有幫助嗎? – user989046

回答

0

你是對的,它似乎有問題在XAML中定義collapsedDocumentPane,因爲AvalonDoc將爲其保留空間(它是標籤頭或其他),完全無視Visibility="Collapsed",所以我最終在代碼中添加了/ removinhg。所以:

首先,從XAML中刪除您"collapsedDocumentPane"(我註釋掉它,以便它可以被用作從後面的代碼後的引用):

<ad:DockingManager x:Name="dockManager" Grid.Row="1"> 
    <ad:ResizingPanel Name="resizePanel" Orientation="Horizontal"> 
     <ad:DocumentPane Name="visibleDocumentPane" HorizontalAlignment="Stretch" > 
      <ad:DocumentContent Title="A"/> 
      <ad:DocumentContent Title="B"/>      
     </ad:DocumentPane> 
     <!--<ad:DocumentPane Name="collapsedDocumentPane" Visibility="Collapsed"> 
      <ad:DocumentContent Title="A"/> 
      <ad:DocumentContent Title="B"/> 
     </ad:DocumentPane>--> 
    </ad:ResizingPanel> 
</ad:DockingManager> 

而在代碼重新創建該XAML背後(在你xaml.cs文件):

private DockablePane _collapsedDocumentPane; 

private DockablePane CollapsedDocumentPane 
{ 
    get 
    { 
    if (_collapsedDocumentPane== null) 
    { 
     _collapsedDocumentPane= new DockablePane(); 
     var a = new DockableContent 
     { 
      Title = "A", 
      DataContext = _youViewModel, //if you pass data context 
      DockableStyle = DockableStyle.AutoHide, 
      Content = new RadGridView(), //just a sample control 
     }; 
     var b = new DockableContent { Title = "B"}; 

     _collapsedDocumentPane.Items.Add(a); 
     _collapsedDocumentPane.Items.Add(b); 
    } 
    return _errorsDockablePane; 
    } 
} 

然後,增加或刪除它的方法:

private void EvaluateCollapsedDocPaneVisibility() 
{ 
    //don't know your scenario 
    if (NeedToDisplay_CollapsedDocPane) 
    { 
     if (!resizePanel.Children.Contains(CollapsedDocumentPane)) 
     resizePanel.Children.Add(CollapsedDocumentPane); 
    } 
    else 
    { 
     if (resizePanel.Children.Contains(CollapsedDocumentPane)) 
     resizePanel.Children.Remove(CollapsedDocumentPane); 
    } 
} 

請注意,該屬性是延遲加載 - 只在需要時才構建。 所以,現在你所要做的就是在需要添加或刪除時調用上面的方法。 這只是一個示例,您可以向方法添加一個arg來告訴它要做什麼,或者其他任何方法,希望這有助於/讓您前進。