初始化布局

            Logging.InfoBiz("初始化布局信息");
dockLayoutManager = new DockLayoutManager();
RestoreLayoutOptions.SetRemoveOldPanels(dockLayoutManager, false);
RestoreLayoutOptions.SetAddNewPanels(dockLayoutManager, true);
dockLayoutManager.DockingStyle = DockingStyle.VS2010;
mainLayout.Children.Add(dockLayoutManager);

保存默认布局

            // 保存默认布局
dockLayoutManager.SaveLayoutToStream(defaultDockLayoutStream);
defaultDockLayoutStream.Flush();

恢复布局

            var layoutPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "layout.xml");
if (File.Exists(layoutPath))
{
dockLayoutManager.ClosedPanels.Clear();
dockLayoutManager.RestoreLayoutFromXml(layoutPath);
foreach (var panel in dockLayoutManager.ClosedPanels.ToList())
{
dockLayoutManager.DockController.Restore(panel);
}
}

1. 布局重置之前需要关闭活动区域

            var docPanel = (DocPanel)((IMainWindow)this).GetActiveDocPanel();
if(docPanel!=null)
{
dockLayoutManager.DockController.Close(docPanel);
}

2. 然后再恢复初始保存的布局

        protected void RestoreDefaultDockLayout()
{
var docPanel = (DocPanel)((IMainWindow)this).GetActiveDocPanel();
if(docPanel!=null)
{
dockLayoutManager.DockController.Close(docPanel);
} defaultDockLayoutStream.Seek(0, SeekOrigin.Begin);
dockLayoutManager.RestoreLayoutFromStream(defaultDockLayoutStream);
foreach (var panel in dockLayoutManager.ClosedPanels.ToList())
{
dockLayoutManager.DockController.Restore(panel);
}
}

3. 将布局保存到配置文件

            var layoutPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "layout.xml");
dockLayoutManager.SaveLayoutToXml(layoutPath);

4. 切换布局中的活动区域

       private void OnWorkspacePanelCommandExecute(object obj)
{
BaseLayoutItem item = null;
if (obj.Equals("1"))
{
item = this.ermlPanel;
}
else if (obj.Equals("2"))
{
item = this.serverPanel;
}
else if (obj.Equals("3"))
{
item = this.diagramPanel;
}
else if (obj.Equals("4"))
{
item = this.stdzPanel;
}
else if (obj.Equals("5"))
{
item = this.outputPanel;
}
else if (obj.Equals("6"))
{
item = this.reviewPanel;
}
else if (obj.Equals("7"))
{
item = this.explrModelSearchPanel;
}
else if (obj.Equals("8"))
{
item = this.naviPanel;
} if (item.Visibility == Visibility.Visible)
{
item.Visibility = Visibility.Collapsed;
}
else
{
item.Visibility = Visibility.Visible;
dockLayoutManager.Activate(item);
}
}

WPF DockLayoutManager布局后的布局重置的更多相关文章

  1. WPF入门教程系列六——布局介绍与Canvas(一)

    从这篇文章开始是对WPF中的界面如何布局做一个较简单的介绍,大家都知道:UI是做好一个软件很重要的因素,如果没有一个漂亮的UI,功能做的再好也无法吸引很多用户使用,而且没有漂亮的界面,那么普通用户会感 ...

  2. WPF Step By Step 完整布局介绍

    WPF Step By Step 完整布局介绍 回顾 上一篇,我们介绍了基本控件及控件的重要属性和用法,我们本篇详细介绍WPF中的几种布局容器及每种布局容器的使用场景,当 然这些都是本人在实际项目中的 ...

  3. WPF学习(3)布局

    今天我们来说说WPF的布局.我们知道WinForm的布局主要是采用基于坐标的方式,当窗口内容发生变化时,里面的控件不会随之动态调整,这就造成了一个很不好的用户体验.而WPF为了避免这个缺点,采用了基于 ...

  4. C# WPF 左侧菜单右侧内容布局效果实现

    原文:C# WPF 左侧菜单右侧内容布局效果实现 我们要做的效果是这样的,左侧是可折叠的菜单栏,右侧是内容区域,点击左侧的菜单项右侧内容区域则相应地切换. wpf实现的话,我的办法是用一个tabcon ...

  5. CSS3初学篇章_7(布局/浏览器默认样式重置)

    CSS布局说到布局,就不得不提布局的核心<div>标签,它与其它标签一样,也是一个XHTML所支持的标签,专门用于布局设计的容器标签.在css布局方式中,div 是这种布局方式的核心对象, ...

  6. WPF初学(一)——布局【良好界面的基础】

    由Winform转到WPF的一部分人,很可能忽略掉布局,习惯性的使用固定定位.然而,没有良好的布局,后面界面控件画的再好看,花哨,都不过是鲜花插在牛粪上,很可能始终都是一坨??(呵呵). 闲话少说,首 ...

  7. WPF学习(一)--布局控件简介

    WPF的4种基本布局介绍 1.Grid的布局 这个就没啥特别好说的,其实,基本上复杂的布局,都需要用到Grid. 主要就是对行和列进行进行设置和定义. 1.行表格 列表格: 包含行和列的表格 2.St ...

  8. WPF笔记(2.7 文字布局)——Layout

    原文:WPF笔记(2.7 文字布局)--Layout 这一节介绍的是文字布局的几个控件:1.TextBlock      最基本的文字控件可以配置5个Font属性.TextWraping属性,&quo ...

  9. SpriteBuilder改变布局后App运行出错代码排查

    原来整个关卡场景放在GameScene.ccb中,后来觉得移到专门的Level.ccb比较好. 移动过后编译运行,只要移动Player的胳膊发射子弹时,Xcode报错: g due to Chipmu ...

  10. WPF编游戏系列 之一 布局设计

    原文:WPF编游戏系列 之一 布局设计        本系列主要使用WPF和C#编写一个简单的小游戏(暂命名XMarket),意在通过该实例进一步学习和体验WPF,也欢迎广大同仁拍砖交流.言归正传,在 ...

随机推荐

  1. MySQL底层概述—6.索引原理

    大纲 1.索引原理 2.二叉查找树 3.平衡二叉树(AVL树) 4.红黑树 5.B-Tree 6.B+Tree 7.Hash索引 8.聚簇索引与非聚簇索引 1.索引原理 索引会在数据文件中(ibd文件 ...

  2. Gitlab的备份与恢复,异机转移

    ​注意:异机转移的时候,gitlab的版本必须一致. 一.备份GitLab数据 停止GitLab服务 gitlab-ctl stop unicorn gitlab-ctl stop sidekiq 创 ...

  3. 中电金信:源启混沌工程平台(V4)与东方通TongwebV7.0完成适配认证

    ​近日,源启混沌工程平台(V4)与北京东方通科技股份有限公司(以下简称东方通)应用服务器软件东方通TongwebV7.0完成产品兼容互认证,通过在产品功能.性能.兼容性方面的全面严格测试,得出结论:东 ...

  4. 【Python】【图像处理】图片压缩方法

    一直想找个"无损压缩"的办法. 当然这并非真的无损. 我采用了Opencv的处理图像相关的方法. 请见代码: 注意: opencv安装:pip install opencv-pyt ...

  5. 【前端】【H5 API】实现全屏显示功能

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. SpringBoot 2.0.0新版和SpringBoot1.5.2版本中Tomcat配置的差别(坑)

    2018年春SpringBoot 2.0.0 新版本有了很多新的改变,其中Tomcat配置上也有了很大改变1.之前老的版本TomcatEmbeddedServletContainerFactory取的 ...

  7. 浅谈 IoT 如何助力制造业企业实现数字化落地

    物联网作为新一代信息技术的重要组成部分,正在加速渗透到各行各业,成为经济社会数字化转型的关键支撑.根据中商产业研究院发布的<2022-2027 年中国物联网市场需求预测及发展趋势前瞻报告> ...

  8. Qt/C++音视频开发63-设置视频旋转角度/支持0-90-180-270度旋转/自定义旋转角度

    一.前言 设置旋转角度,相对来说是一个比较小众的需求,如果视频本身带了旋转角度,则解码播放的时候本身就会旋转到对应的角度显示,比如手机上拍摄的视频一般是旋转了90度的,如果该视频文件放到电脑上打开,一 ...

  9. Qt编写地图综合应用49-地图类型(街道图、卫星图)

    一.前言 地图类型主要是两种,街道图和卫星图,平时我们看到的默认的都是街道图,无论是街道图还是卫星图,都是一张张图片文件组成的,级别越高,图片越是清晰,一般都会支持到19级的地图,相当于精确到20米内 ...

  10. Vue中this.$store.dispatch() 与 this.$store.commit()的区别

    两者的区别 (1)this.$store.commit() commit: 同步操作 this.$store.commit('方法名',值)[存储] this.$store.state.方法名[取值] ...