使用 RadDocking 控件模拟 VS 布局

来源:互联网 发布:python 当前毫秒数 编辑:程序博客网 时间:2024/06/05 20:25

(注:此文章的技术实现基于Telerik RadControl for WPF 2010 Q2 0609)

 

RadDocking允许我们定义活动面板的布局,它的子项中包含一个DocumentHost,这个可以模拟VS中间部分的功能。
实现界面如图所示:

 


感兴趣的朋友还要参考RadControl帮助文档中关于RadDocking的说明。这里列出需要注意的几点:

1. RadDocking.DocumentHost属性是个可读写属性,虽然在IDE的提示中显示是个只读属性。这允许我们通过代码设置一个DocumentHost对象。


2. 下面的PreviewShowCompass事件处理函数可以限制RadPane只允许Dock在界面的周边和浮动,不允许Dock在中心区域(中心区域是DocumentHost),同时限制RadDocumentPane不能Dock在中心区域之外。注意:该事件属于RadDocking。
private void docking_PreviewShowCompass(object sender, Telerik.Windows.Controls.Docking.PreviewShowCompassEventArgs e)
{
    e.Compass.IsLeftIndicatorVisible = false;
    e.Compass.IsRightIndicatorVisible = false;
    e.Compass.IsTopIndicatorVisible = false;
    e.Compass.IsBottomIndicatorVisible = false;
    e.Compass.IsCenterIndicatorVisible = false;

    RadDocumentPane rdp = (e.DraggedSplitContainer.Items[0] as RadPaneGroup).Items[0] as RadDocumentPane;

    if (rdp == null)
    {
        if (e.TargetGroup != null)
        {
            if (e.TargetGroup.IsInDocumentHost == false)
            {
                e.Compass.IsLeftIndicatorVisible = true;
                e.Compass.IsRightIndicatorVisible = true;
                e.Compass.IsTopIndicatorVisible = true;
                e.Compass.IsBottomIndicatorVisible = true;
                e.Compass.IsCenterIndicatorVisible = true;
            }
        }
    }
    else
    {
        if (e.TargetGroup != null)
        {
            if (e.TargetGroup.IsInDocumentHost)
            {
                e.Compass.IsLeftIndicatorVisible = true;
                e.Compass.IsRightIndicatorVisible = true;
                e.Compass.IsTopIndicatorVisible = true;
                e.Compass.IsBottomIndicatorVisible = true;
                e.Compass.IsCenterIndicatorVisible = true;
            }
        }
    }
}

 

3. 当中心区域的Panel全部关闭后,此时拖动周边的Panel是可以Dock在中心区域的。如果不希望出现这种效果,只需要设置每个周边的RadPane.CanDockInDocumentHost属性为false即可。
4. 在设置面板初始大小时要注意,浮动面板使用FloatingLocationProperty和FloatingSizeProperty两个依赖属性,而非浮动面板使用InitialSizeProperty依赖属性。

 

 

原创粉丝点击