初始化布局

            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. go 编译超时解决

    转载请注明出处: 在编译go项目时,遇到依赖下载超时,异常输出如下: CGO_ENABLED=0 GOOS=linux GO111MODULE=on go build -a -ldflags '-ex ...

  2. Oracle无法远程连接的原因及解决办法

    前提 虚拟机Linux(centos7)下静默安装Oracle数据库,本地能访问.文章参考:Linux-CentOS7下安装Oracle11g - sankuoshu - 博客园 (cnblogs.c ...

  3. Java性能最后一个领域:去除垃圾回收器

    Java性能最后一个领域:去除垃圾回收器 不产生垃圾不等于不创建对象,如果对象创建满足以下几个条件,仍然可以在创建对象之后不需要垃圾回收器: 应用程序或者库在初始化的时候生成有限个数的对象,然后不断复 ...

  4. .NET 9 增强 OpenAPI 规范

    在 .NET 9 的更新中,微软增强了原生 OpenAPI.这一变化表明 .NET 正在更加拥抱开放标准,同时让开发者体验更加轻松高效.本文将探讨为何进行这一更改.OpenAPI 的优势,以及如何在 ...

  5. Supermap Objects API开发中禁用默认的选择集显示风格,启用自定义的显示风格的代码

    //#region 使用自定义风格设置选中状态 Selection selection = new Selection();//从该记录集获取选择集 selection.FromRecordset(r ...

  6. 编译WorldWindJavav2.1.0中的ApplicationTemplate.java文件时有时报出“Exception in thread "main" java.lang.AbstractMethodError: javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V”错误的解决办法

    1 问题 编译WorldWindJavav2.1.0中的ApplicationTemplate.java文件时有时报出如下错误: Exception in thread "main" ...

  7. V3Det&Bigdetection下载记录

    V3Det dataset https://opendatalab.com/V3Det BigDetection

  8. Coravel:一个可轻松实现任务调度、队列、邮件发送的开源项目

    推荐一个轻量级的任务调度开源项目. 01 项目简介 Coravel是一个.NET开源任务调度库,只需简单代码.几乎零配置就可以实现多种功能柜,如任务调度.队列.缓存.事件广播和邮件发送等.该项目特点就 ...

  9. Awesome-Text2GQL:图查询微调语料的自动生成框架

      过去一年,GraphRAG技术发展如火如荼,尤其是基于关键词.向量驱动的知识检索方法不胜枚举.然而通过子图召回的检索方式,对用户真实查询意图的定位仍缺乏足够的准确度.我们需要更直接的方式,将自然语 ...

  10. Hugo|30分钟搭建完整的个人博客

    本文将讲述如何使用 Hugo,从0到1完成一个"静态博客"的搭建.展示 hugo 可以通过简单配置,自定义装饰博客界面的能力,并集成网站数据统计能力. 下一篇文章将教会你将站点免费 ...