c# - 如何拉伸(stretch)/最大化 AvalonDock DocumentPane

标签 c# wpf avalondock

我在 .NET 3.5 上使用 AvalonDock v 1.3。

我在设计时向 DockingManager 添加了两个文档 Pane 。第一个设置为可见,第二个设置为隐藏/折叠(请参阅下面的 Visibility="Collapsed")。

当我启动应用程序时,第二个文档 Pane 可见,这是预期的行为,但不幸的是,尽管事实如此,可见文档面板并未显示为拉伸(stretch)到主窗口的边缘Horizo​​ntalAlignment 设置为“Stretched”。我将如何使这个剪辑(或最大化)到允许区域的边缘?

这是我正在使用的 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>

最佳答案

你是对的,在 XAML 中定义你的 collapsedDocumentPane 似乎有问题,因为 AvalonDoc 会为它保留空间(它是标签页眉或其他)完全无视 Visibility="Collapsed",所以我最终在代码中添加/删除了我的代码。所以:

首先,从 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 以告诉它要做什么,或其他任何事情,希望这对您有所帮助/助您一臂之力。

关于c# - 如何拉伸(stretch)/最大化 AvalonDock DocumentPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8144867/

相关文章:

c# - 如何对找到的棋盘角进行排序?

c# - Selenium 查找隐藏元素 C#

c# - 能够在 WPF 网络浏览器中支持 Html5

wpf - 在 WPF 中,查看图像的一部分

C#串口-不是所有的数据都添加到Listview

c# - WPF 使用 MVVM 对集合进行分组

wpf - Avalondock 新标签定位和顺序

c# - AvalonDock 停靠一个窗口

wpf - 移除 AvalonDock 坞站并关闭按钮

c# - 温莎城堡 : How to retrieve proxy for specific instance?