为什么 AvalonDock 窗格在拆分器第一次移动时会在高度上塌陷?
Why do AvalonDock panes collapse in height when splitters first moved?
C#、WPF、AvalonDock v 4.0.0.0。我在 LayoutPanel
中垂直排列了三个 AnchorablePanes
。当用户首次调整任一分离器时,所有三个 AnchorablePanes
的高度或垂直位置都会突然改变。据我所知,这是怎么回事:
移动拆分器时,最远的 AnchorablePane
(即应该不受移动影响的拆分器)会折叠到其最小高度。其余两个调整以填充 space,并保持相对于彼此的正确高度比。即
如果移动顶部分离器,AnchorablePane
3 折叠,AnchorablePanes
1 和 2 展开以填充 space。
如果移动底部分离器,AnchorablePane
1 会折叠,AnchorablePanes
2 和 3 会展开以填充 space。
AnchorablePanes
不要只是折叠以适应内容。在我的真实应用程序中,它们确实有内容,但会被遮盖。
一旦发生这种情况,此后的行为是正常的。好像初始显示与底层参数不匹配,所以第一次重新计算时有一个修正。
我们知道造成这种情况的原因或如何预防吗?以下最小示例进行了演示。只需 运行 这个并移动其中一个分离器。
<Window x:Class="TestAvalon.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dock="http://schemas.xceed.com/wpf/xaml/avalondock"
Title="MainWindow" Height="450" Width="800">
<Grid>
<dock:DockingManager x:Name = "Dockman">
<dock:LayoutRoot x:Name = "_layoutRoot" >
<dock:LayoutPanel Orientation="Vertical">
<dock:LayoutAnchorablePaneGroup Orientation="Vertical">
<dock:LayoutAnchorablePane>
<dock:LayoutAnchorable Title = "TEST PANE 1">
</dock:LayoutAnchorable >
</dock:LayoutAnchorablePane >
<dock:LayoutAnchorablePane>
<dock:LayoutAnchorable Title = "TEST PANE 2">
</dock:LayoutAnchorable >
</dock:LayoutAnchorablePane >
<dock:LayoutAnchorablePane>
<dock:LayoutAnchorable Title = "TEST PANE 3">
</dock:LayoutAnchorable >
</dock:LayoutAnchorablePane >
</dock:LayoutAnchorablePaneGroup>
</dock:LayoutPanel>
</dock:LayoutRoot >
</dock:DockingManager>
</Grid>
</Window>
using System.Windows;
namespace TestAvalon
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
虽然我不知道是什么导致了这种行为,也不知道在使用 Xceed 的 AvalonDock 时如何避免这种情况,但我已经通过使用 Dirkster's AvalonDock fork 解决了这个问题。我使用的是 4.50.2 版,只需要对代码进行少量更改即可在两个库之间切换。 Dirkster 的 AvalonDock 没有出现问题中描述的问题行为。
C#、WPF、AvalonDock v 4.0.0.0。我在 LayoutPanel
中垂直排列了三个 AnchorablePanes
。当用户首次调整任一分离器时,所有三个 AnchorablePanes
的高度或垂直位置都会突然改变。据我所知,这是怎么回事:
移动拆分器时,最远的 AnchorablePane
(即应该不受移动影响的拆分器)会折叠到其最小高度。其余两个调整以填充 space,并保持相对于彼此的正确高度比。即
如果移动顶部分离器,AnchorablePane
3 折叠,AnchorablePanes
1 和 2 展开以填充 space。
如果移动底部分离器,AnchorablePane
1 会折叠,AnchorablePanes
2 和 3 会展开以填充 space。
AnchorablePanes
不要只是折叠以适应内容。在我的真实应用程序中,它们确实有内容,但会被遮盖。
一旦发生这种情况,此后的行为是正常的。好像初始显示与底层参数不匹配,所以第一次重新计算时有一个修正。
我们知道造成这种情况的原因或如何预防吗?以下最小示例进行了演示。只需 运行 这个并移动其中一个分离器。
<Window x:Class="TestAvalon.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dock="http://schemas.xceed.com/wpf/xaml/avalondock"
Title="MainWindow" Height="450" Width="800">
<Grid>
<dock:DockingManager x:Name = "Dockman">
<dock:LayoutRoot x:Name = "_layoutRoot" >
<dock:LayoutPanel Orientation="Vertical">
<dock:LayoutAnchorablePaneGroup Orientation="Vertical">
<dock:LayoutAnchorablePane>
<dock:LayoutAnchorable Title = "TEST PANE 1">
</dock:LayoutAnchorable >
</dock:LayoutAnchorablePane >
<dock:LayoutAnchorablePane>
<dock:LayoutAnchorable Title = "TEST PANE 2">
</dock:LayoutAnchorable >
</dock:LayoutAnchorablePane >
<dock:LayoutAnchorablePane>
<dock:LayoutAnchorable Title = "TEST PANE 3">
</dock:LayoutAnchorable >
</dock:LayoutAnchorablePane >
</dock:LayoutAnchorablePaneGroup>
</dock:LayoutPanel>
</dock:LayoutRoot >
</dock:DockingManager>
</Grid>
</Window>
using System.Windows;
namespace TestAvalon
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
虽然我不知道是什么导致了这种行为,也不知道在使用 Xceed 的 AvalonDock 时如何避免这种情况,但我已经通过使用 Dirkster's AvalonDock fork 解决了这个问题。我使用的是 4.50.2 版,只需要对代码进行少量更改即可在两个库之间切换。 Dirkster 的 AvalonDock 没有出现问题中描述的问题行为。