我正在使用开源库AvalonDock支持拖放多个选项卡(窗格)在外部和返回到MainWindow,我想要禁用大多数可能的放置目标(或者说让布局),例如在下面放置一个选项卡另一个或并排放置标签。换句话说,我只想允许在firefox或chrome浏览器中的“一行标签”中放置标签。
是否有任何属性可以禁用放置目标(布局),如果是,您能否提供一个简短的代码示例?
这是一个带有三个可停靠窗格(LayoutDocuments)的MainWindow的简单示例,它看起来像WPF标准TabControl的TabItems(抱歉,我无法发布此截图):
<Window x:Class="TabTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:xcad="http://schemas.xceed.com/wpf/xaml/avalondock"
Height="300" Width="300">
<Grid>
<xcad:DockingManager VerticalAlignment="Stretch">
<xcad:LayoutRoot>
<xcad:LayoutPanel>
<xcad:LayoutDocumentPane>
<xcad:LayoutDocument Title="Doc1">
</xcad:LayoutDocument>
<xcad:LayoutDocument Title="Doc2">
</xcad:LayoutDocument>
<xcad:LayoutDocument Title="Doc3">
</xcad:LayoutDocument>
</xcad:LayoutDocumentPane>
</xcad:LayoutPanel>
</xcad:LayoutRoot>
</xcad:DockingManager>
</Grid>
</Window>
感谢您的帮助!
答案 0 :(得分:1)
这个答案是为AvalonDock 2.0编写的。我不知道这是否适用于其他版本的AvalonDock。
在源代码中,有一个文件Controls / OverlayWindow.cs。更改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;
}
...
}
省略号用于汇总代码段。
答案 1 :(得分:0)
WPF中的大多数UI元素都有一个名为AllowDrop
的属性。如果将此值设置为false,则应该阻止拖动的元素被放置在该控件上。但是,在拖放过程中还可以处理一些方法,使开发人员可以完全控制何时禁用放置操作。也许您应该好好阅读MSDN上的Drag and Drop Overview页面以了解更多信息。