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

时间:2013-12-06 11:40:07

标签: c# wpf avalondock

我正在使用开源库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>

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

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

在源代码中,有一个文件Controls / OverlayWindow.cs。更改elsecase 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页面以了解更多信息。