初始化布局

            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. jackson 中对 null 的处理

    前情提要: 在项目中如何将null值转变为空字符串呢? @Configuration public class JacksonConfig { @Bean @Primary @ConditionalO ...

  2. MySQL中INSERT INTO ... ON DUPLICATE KEY UPDATE浅析

    最近在做一个阅读次数的需求的时候,有这样一个场景,如果数据库中没有数据,就进行INSERT操作,有数据的话,阅读次数就+1.此处有两种实现方式,一种是想将数据查出来,在Java中进行处理,没有就INS ...

  3. kube-apiserver 高可用,keepalived + haproxy

    为什么要做高可用 在生产环境中,kubernetes 集群中会多多个 master 节点,每个 master 节点上都会部署 kube-apiserver 服务,实现高可用.但是 client 访问 ...

  4. controller返回路径问题

    项目打包后,报错template might not exist or might not be accessible by any of the configured Template Resolv ...

  5. cas5配置redis

    ​POM文件加载redis依赖,重新maven clean package <dependency> <groupId>org.apereo.cas</groupId&g ...

  6. 龙哥量化:MACD指标的金叉死叉,这样使用更准确(图解)

    如果您需要代写技术指标公式, 请联系我. 龙哥QQ:591438821 龙哥微信:Long622889 本文的策略过于简单,你可以加一些更复杂的限制条件 1.水上金叉,可看涨; 2.水上死叉,是洗盘; ...

  7. Qt开源作品7-高亮按钮控件

    一.前言 这个高亮按钮控件并非本人原创作品,是参考的Qt界的一个大师级人物公孙二狗的作品,各位有兴趣可以去搜索查看,在原作者的代码上,我只是改成了自己的控件的框架结构,然后完善了一些细节,比如增加了各 ...

  8. 网络编程懒人入门(十三):一泡尿的时间,快速搞懂TCP和UDP的区别

    本文引用了作者Fundebug的"一文搞懂TCP与UDP的区别"一文的内容,感谢无私分享. 1.引言 网络协议是每个搞网络通信应用开发(比如IM.推送.网关等等)的程序员都必须要掌 ...

  9. IM通讯协议专题学习(一):Protobuf从入门到精通,一篇就够!

    本文由IBM开发者社区分享,有较多修订和改动. 1.引言 在当今移动网络时代,手机流量和电量是宝贵的资源,对于移动端最常见的即时通讯IM应用,由于实时通信基于Socket长连接,它对于流量和电量的需求 ...

  10. vue基础2

    1.表单 表单里面有单选框,多选框,下拉框,文本域 vue单页应用 SPA:signal page application(单页应用) 多页面:1个url->1个html文件 多个url-> ...