一个 WPF 文档和工具窗口布局容器

一个 WPF 文档和工具窗口布局容器、用于排列文档 和工具窗口的方式与许多知名 IDE 类似,例如 Eclipse、Visual Studio、 PhotoShop 等等

AvalonDock 是一个 WPF 文档和工具窗口布局容器,用于排列文档 和工具窗口的方式与许多知名 IDE 类似,例如 Eclipse、Visual Studio、 PhotoShop 等等。

从源代码构建 AvalonDock (推荐)

此项目支持多目标框架(NetCore 3 和 .Net 4)。这意味着它需要 Visual Studio Community 2019 或更好的版本。

演示屏幕截图

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

开源地址

AvalonDock

实际简单使用查看下面代码

<Pagex:Class="FlightControlComputer.Views.Pages.RS422Page"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:avalonDock="https://github.com/Dirkster99/AvalonDock"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:local="clr-namespace:FlightControlComputer.Views.Pages"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"Title="RS422Page"d:DesignHeight="450"d:DesignWidth="800"UseLayoutRounding="True"mc:Ignorable="d"><DockingManagerx:Name="dockManager"Grid.Row="1"AllowMixedOrientation="True"AutoWindowSizeWhenOpened="True"IsVirtualizingAnchorable="True"IsVirtualizingDocument="True"><DockingManager.ContextMenu><ContextMenu><MenuItem Click="ShowSerialPage_Click" Header="一个数据区" /><MenuItem Click="ShowDataPage_Click" Header="二个数据区" /></ContextMenu></DockingManager.ContextMenu><DockingManager.Theme><Vs2013LightTheme /></DockingManager.Theme><DockingManager.DocumentHeaderTemplate><DataTemplate><StackPanel Orientation="Horizontal"><Image Margin="0,0,4,0" Source="{Binding IconSource}" /><TextBlock Text="{Binding Title}" TextTrimming="CharacterEllipsis" /></StackPanel></DataTemplate></DockingManager.DocumentHeaderTemplate><LayoutRoot><!--  Only include the left side layout for docking  --><LayoutPanel Orientation="Horizontal"><!--<LayoutAnchorablePaneGroup DockWidth="50">--><LayoutAnchorablePane DockWidth="50"><LayoutAnchorableTitle="一个数据区"ContentId="toolWindow1"Hiding="OnToolWindow1Hiding"><StackPanel MinHeight="450"><!--  一个数据区窗口 的界面代码这里实现 --></StackPanel></LayoutAnchorable></LayoutAnchorablePane><LayoutAnchorablePane DockWidth="50"><LayoutAnchorable Title="二个数据区" ContentId="toolWindow2"><!--  另一个数据区窗口界面代码这里实现   --> </Grid></LayoutAnchorable></LayoutAnchorablePane><!--</LayoutAnchorablePaneGroup>--></LayoutPanel></LayoutRoot></DockingManager></Page>

后台代码

//关键代码#region TestBackground/// <summary>/// TestBackground Dependency Property/// </summary>public static readonly DependencyProperty TestBackgroundProperty =DependencyProperty.Register("TestBackground", typeof(Brush), typeof(RS422Page),new FrameworkPropertyMetadata((Brush)null));/// <summary>/// Gets or sets the TestBackground property.  This dependency property /// indicates a randomly changing brush (just for testing)./// </summary>public Brush TestBackground{get => (Brush)GetValue(TestBackgroundProperty);set => SetValue(TestBackgroundProperty, value);}#endregion#region FocusedElement/// <summary>/// FocusedElement Dependency Property/// </summary>public static readonly DependencyProperty FocusedElementProperty =DependencyProperty.Register("FocusedElement", typeof(string), typeof(RS422Page),new FrameworkPropertyMetadata((IInputElement)null));/// <summary>/// Gets or sets the FocusedElement property.  This dependency property /// indicates ..../// </summary>public string FocusedElement{get => (string)GetValue(FocusedElementProperty);set => SetValue(FocusedElementProperty, value);}#endregionprivate void OnLayoutRootPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e){var activeContent = ((LayoutRoot)sender).ActiveContent;if (e.PropertyName == "ActiveContent"){Debug.WriteLine(string.Format("ActiveContent-> {0}", activeContent));}}private void ShowSerialPage_Click(object sender, RoutedEventArgs e){var toolWindow1 = dockManager.Layout.Descendents().OfType<LayoutAnchorable>().Single(a => a.ContentId == "toolWindow1");if (toolWindow1.IsHidden)toolWindow1.Show();else if (toolWindow1.IsVisible)toolWindow1.IsActive = true;elsetoolWindow1.AddToLayout(dockManager, AnchorableShowStrategy.Bottom | AnchorableShowStrategy.Most);}private void ShowDataPage_Click(object sender, RoutedEventArgs e){var toolWindow1 = dockManager.Layout.Descendents().OfType<LayoutAnchorable>().Single(a => a.ContentId == "toolWindow2");if (toolWindow1.IsHidden)toolWindow1.Show();else if (toolWindow1.IsVisible)toolWindow1.IsActive = true;elsetoolWindow1.AddToLayout(dockManager, AnchorableShowStrategy.Bottom | AnchorableShowStrategy.Most);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919482.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【qml-5】qml与c++交互(类型单例)

背景&#xff1a; 【qml-1】qml与c交互第一次尝试&#xff08;实例注入&#xff09; 【qml-2】尝试一个有模式的qml弹窗 【qml-3】qml与c交互第二次尝试&#xff08;类型注册&#xff09; 【qml-4】qml与c交互&#xff08;类型多例&#xff09; 【qml-5】qml与c交互&#…

循环神经网络(RNN)、LSTM 与 GRU (一)

循环神经网络&#xff08;RNN&#xff09;、LSTM 与 GRU &#xff08;一&#xff09; 文章目录循环神经网络&#xff08;RNN&#xff09;、LSTM 与 GRU &#xff08;一&#xff09;循环神经网络&#xff08;RNN&#xff09;、LSTM 与 GRU一、RNN&#xff08;Recurrent Neural N…

【AAOS】Android Automotive 16模拟器源码下载及编译

源码下载repo init -u https://android.googlesource.com/platform/manifest -b android-16.0.0_r2 repo sync -c --no-tags --no-clone-bundle源码编译source build/envsetup.sh lunch sdk_car_x86_64-bp2a-eng make -j8运行效果emualtorHomeAll appsSettingsHAVCNotification…

jvm三色标记

好的&#xff0c;咱们把专业概念和生活例子结合起来&#xff0c;一步一步说清楚三色标记法&#xff1a;一、核心概念&#xff1a;用“颜色”给对象贴“状态标签”就像给家里的物品贴标签&#xff0c;每种颜色代表它在“垃圾回收&#xff08;大扫除&#xff09;”中的状态&#…

生成式AI的能力边界与职业重构:从“百科实习生“到人机协作增强器

根据微软最新研究&#xff0c;基于20万条Copilot使用数据及用户反馈&#xff0c;研究者揭示了生成式AI在实际应用中的能力边界与职业影响。数据显示&#xff0c;用户使用AI助手最频繁的任务是信息获取&#xff08;占比近40%&#xff09;&#xff0c;其次是公众沟通类工作&#…

java17学习笔记

Java17是一个重要的特性发布&#xff0c;也是比较常用的一个版本&#xff0c;根据 2024Java生态统计&#xff0c;Java 17、11 和 8 的用户比例分别为 35%、33% 和 29%。它遵循了自Java10以来引入的Java发布步调&#xff0c;并于2021年 9 月 14 日发布&#xff0c;在Java16发布后…

【AI应用】修改向量数据库Milvus默认密码

说明&#xff1a; 1&#xff09;部署向量数据库milvus运行一段时间后&#xff0c;想开启密码认证登录attu页面 2&#xff09;开启密码认证登录&#xff0c;提示用户和密码不正确&#xff0c;因为默认密码已存储在物理机 3&#xff09;通过attu管理页面修改向量数据库milvus默认…

分布式系统消息队列:可靠投递与延时消息实战

在分布式系统架构中&#xff0c;消息队列&#xff08;MQ&#xff09;作为解耦服务、削峰填谷、异步通信的核心组件&#xff0c;其消息投递的可靠性与延时消息的精准性直接影响业务系统的稳定性。本文结合实际业务场景&#xff0c;详细解析消息投递的全流程设计与延时消息的通用…

Java 学习笔记(基础篇6)

面向对象基础1. 类和对象(1) 示例&#xff1a;public class Student {String name "张三";int age 23;public void study() {System.out.println("学习 Java");}public void eat() {System.out.println("吃饭");} }public class Test {public …

光学件加工厂倚光科技:陪跑光学未来力量

在光学创新的漫漫长路上&#xff0c;总有一些看似 “不划算” 的坚持&#xff0c;却在悄然改写行业的未来。倚光科技的故事&#xff0c;就始于这样一种选择 —— 明知光学打样利润微薄&#xff0c;明知上百个项目中能走到量产的寥寥无几&#xff0c;仍愿意投入全球顶尖的设备与…

RabbitMQ:生产者可靠性(生产者重连、生产者确认)

目录一、生产者重连二、生产者确认一、生产者重连 当网络不稳定的时候&#xff0c;利用重试机制可以有效提高消息发送的成功率。不过SpringAMQP提供的重试机制是阻塞式的重试&#xff0c;也就是说多次重试过程中&#xff0c;当前线程是被阻塞的&#xff0c;会影响业务性能。 …

【深度学习新浪潮】空天地数据融合技术在城市三维重建中的应用

空天地数据融合技术在城市三维重建中的应用已取得显著进展,尤其在提升精度以满足具身智能机器人仿真训练需求方面,研究和产品均呈现多样化发展。以下是关键研究进展、产品方案及精度要求的详细分析: 一、研究进展与技术路径 1. 多源数据融合的技术突破 时空基准统一:通过…

Selenium自动化测试入门:cookie处理

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快driver.get_cookies() # 获得cookie 信息driver.get_cookies(name) # 获得对应name的cookie信息add_cookie(cookie_dict) # 向cookie 添加会话信息delete_cookie(na…

快解析如何让远程访问更安全?

一、勒索病毒攻击服务器的途径很多用户服务器对外开放&#xff0c;实现外网访问&#xff0c;担心服务器被勒索病毒攻击&#xff01;勒索病毒攻击服务器的途径之一是通过路由器开放的端口进行扫描攻击&#xff0c;所以尽量不要在服务器的路由器和防火墙中开放端口二、快解析如何…

Linux下编译ARPACK

本文记录Linux下编译ARPACK的流程。 零、环境 操作系统Ubuntu 22.04.4 LTSVS Code1.92.1Git2.34.1GCC11.4.0CMake3.22.1oneAPI2024.2.1 一、依赖 1.1 安装oneAPI 参见&#xff1a;Get the Intel oneAPI Base Toolkit , Get the Intel oneAPI HPC Toolkit 二、编译ARPACK …

芋道RBAC实现介绍

说明&#xff1a;之前写过一篇博客&#xff0c;介绍如何搭建一个基于角色的权限验证框架 搭建一个基于角色的权限验证框架 本文介绍在非常受欢迎的开源框架——芋道中是如何实现 RBAC 的&#xff0c;芋道的部署参考下面这篇文章&#xff1a; 芋道微服务代码部署 介绍 一般…

Docker部署Jellyfin,没有公网IP如何使用内网穿透远程访问?

Jellyfin是一款完全开源、免费的媒体服务器&#xff0c;可帮助你快速搭建属于自己的私人流媒体平台&#xff1a;电影、剧集、音乐、照片统统收纳&#xff0c;跨设备随点随播。本文将以最简洁的步骤&#xff0c;演示如何在Docker容器中部署Jellyfin&#xff0c;并通过贝锐花生壳…

Podman:Mysql(使用卷)

下载镜像hpphcomp:~$ podman pull docker.1ms.run/mysql:latest Trying to pull docker.1ms.run/mysql:latest... Getting image source signatures Copying blob c81e70a25040 done | Copying blob 31f7d8dc4024 done | Copying blob b9916866e45f done | Copying blob …

2025年渗透测试面试题总结-21(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 一、文件上传绕过方式&#xff08;Top 5&#xff09; 二、文件包含高危函数&#xff08;PHP为例&#xff0…

像海绵一样吸收技术书籍的高效学习方法

像海绵一样吸收技术书籍的高效学习方法前言六步高效阅读法步骤1&#xff1a;快速浏览章节步骤2&#xff1a;先读章末测验步骤3&#xff1a;只读粗体字步骤4&#xff1a;只读每段的首句和末句步骤5&#xff1a;通读整章步骤6&#xff1a;复习与重复高效学习技术书籍的实用技巧1.…