Как растянуть / развернуть панель документов AvalonDock - PullRequest
4 голосов
/ 16 ноября 2011

Я использую AvalonDock v 1.3 в .NET 3.5.

Я добавил две панели документов во время разработки в DockingManager. Первый виден как видимый, а второй скрыт / свернут (см. Visibility = "Collapsed" ниже).

Когда я запускаю приложение, вторая панель документов не видима, что является предполагаемым поведением, но, к сожалению, видимая панель документов не отображается растянутой по краям основного окна, несмотря на то, что Горизонтальное выравнивание установлено на «Растянутый». Как мне сделать этот клип (или развернуть его) по краям разрешенной области?

Это 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>

Спасибо, Dave

В соответствии с запросом, вот полный 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>

1 Ответ

0 голосов
/ 12 июня 2013

Вы правы, кажется проблематичным определить ваш collapsedDocumentPane в XAML, так как AvalonDoc зарезервирует для него место (заголовок вкладки или что-то еще), полностью игнорируя Visibility="Collapsed", поэтому я добавил / удалил мойв коде.Итак:

Во-первых, удалите ваш "collapsedDocumentPane" из 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 в коде (в вашем 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);
   }
 }

Обратите внимание, свойство загружено с отложенной загрузкой - построенотолько когда нужно.Так что теперь все, что вам нужно сделать, это вызвать метод выше, когда вам нужно добавить или удалить.Это всего лишь пример, вы можете добавить аргумент к методу, чтобы сказать ему, что делать, или что-то еще, надеясь, что это поможет / поможет вам.

...