我在 .NET 3.5 上使用 AvalonDock v 1.3。
我在设计时向 DockingManager 添加了两个文档 Pane 。第一个设置为可见,第二个设置为隐藏/折叠(请参阅下面的 Visibility="Collapsed")。
当我启动应用程序时,第二个文档 Pane 不可见,这是预期的行为,但不幸的是,尽管事实如此,可见文档面板并未显示为拉伸(stretch)到主窗口的边缘HorizontalAlignment 设置为“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/