禁用Avalondock中的放置目标(布局)

我正在使用开源库AvalonDock支持拖放多个选项卡(窗格)在外部并返回到MainWindow,我想禁用大多数可能的放置目标(或者说布局),比如将标签放在另一个下面或放置标签并排。 换句话说,我只想允许在firefox或chrome浏览器中的“一行标签”中放置标签。

是否有任何属性可以禁用放置目标(布局),如果是,您能否提供一个简短的代码示例?

这是一个带有三个可停靠窗格(LayoutDocuments)的MainWindow的简单示例,它看起来像WPF标准TabControl的TabItems(抱歉,我无法发布此截图):

                  

谢谢你的帮助!

这个答案是为AvalonDock 2.0编写的。 我不知道这是否适用于其他版本的AvalonDock。

在源代码中,有一个文件Controls / OverlayWindow.cs。 更改case DropAreaType.DocumentPane: default:else内的case DropAreaType.DocumentPane: default:隐藏所需的目标,无论如何:

 void IOverlayWindow.DragEnter(IDropArea area) { ... switch (area.Type) { ... case DropAreaType.DocumentPane: default: { ... else { areaElement = _gridDocumentPaneDropTargets; _documentPaneDropTargetLeft.Visibility = Visibility.Hidden; _documentPaneDropTargetRight.Visibility = Visibility.Hidden; _documentPaneDropTargetTop.Visibility = Visibility.Hidden; _documentPaneDropTargetBottom.Visibility = Visibility.Hidden; /* ... */ } } break; } ... } 

省略号用于汇总代码段。

WPF中的大多数UI元素都有一个名为AllowDrop的属性。 如果将此值设置为false,则应该阻止拖动的元素在该控件上被删除。 但是,在拖放过程中还可以处理一些方法,使开发人员可以完全控制何时禁用放置操作。 也许您应该好好阅读MSDN上的拖放概述页面以了解更多信息。