MS Office和VisualStudio一直引领着桌面应用的时尚潮流,大型的工业软件一般都会紧跟潮流,搭配着Ribbon和DockPanel风格的界面。本文将介绍WPF下两个轻量级的Ribbon和Dock界面框架,以及搭配AnyCAD Rapid SDK实现一个三维的应用框架。

1 增加Ribbon界面

1.1 下载Fluent.Ribbon

nuget上搜索ribbon,找到Fluent.Ribbon,添加到项目中

1.2 设置资源路径

App.xaml

<Application x:Class="RapidUI.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:RapidUI"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary Source="pack://application:,,,/Fluent;Component/Themes/Generic.xaml" />
</Application.Resources>
</Application>

1.3 设置主窗口

1.3.1 修改主窗口的基类

MainWindow.xaml.cs

    public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
}
}

1.3.2 引用Fluent.Ribbon控件

MainWindow.xaml

<Fluent:RibbonWindow  x:Class="RapidUI.MainWindow"
xmlns:Fluent="urn:fluent-ribbon"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:RapidUI"
mc:Ignorable="d"
Title="AnyCAX 2022" Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<!--Ribbon-->
<RowDefinition Height="Auto"></RowDefinition>
<!--工作窗口-->
<RowDefinition></RowDefinition>
<!--StatusBar-->
<RowDefinition Height="25"></RowDefinition>
</Grid.RowDefinitions>
<!--Ribbon-->
<!--工作窗口-->
<!--StatusBar-->
</Grid>
</Fluent:RibbonWindow>

1.4 添加Ribbon

1.4.1 添加RibbonBar

MainWindow.xaml

        <!--Ribbon-->
<Fluent:Ribbon Grid.Row="0">
<!--Tabs-->
<Fluent:RibbonTabItem Header="建模">
<Fluent:RibbonGroupBox Header="基本体" IsLauncherVisible="False">
<Fluent:Button Header="球"/>
</Fluent:RibbonGroupBox>
</Fluent:RibbonTabItem>
</Fluent:Ribbon>
<!--工作窗口-->

1.4.2 添加RibbonStatusBar

        <!--StatusBar-->
<Fluent:StatusBar Grid.Row="2">
<Fluent:StatusBarItem Title="Ready"
Value="150"
HorizontalAlignment="Left">
<TextBlock Text=" 准备就绪" />
</Fluent:StatusBarItem> <Separator HorizontalAlignment="Left" /> <Fluent:StatusBarItem Title="WebSite"
HorizontalAlignment="Right"
Value="www.anycad.cn " />
</Fluent:StatusBar>

运行一下:

2 增加浮动控件

2.1 安装Dirkster.AvalonDock

2.2 修改XAML

MainWindow.xaml

<Fluent:RibbonWindow
...
xmlns:ad="https://github.com/Dirkster99/AvalonDock"
...

2.3 增加Dock控件

MainWindow.xaml

        <!--工作窗口-->
<ad:DockingManager x:Name="dockingManager" Grid.Row="1">
<ad:DockingManager.Theme>
<ad:Vs2013LightTheme/>
</ad:DockingManager.Theme>
<ad:LayoutRoot>
<ad:LayoutPanel Orientation="Horizontal">
<ad:LayoutAnchorablePane DockWidth="200">
<ad:LayoutAnchorable Title="项目" CanClose="False" CanFloat="False" CanHide="False" >
<!--项目窗口-->
</ad:LayoutAnchorable>
</ad:LayoutAnchorablePane>
<ad:LayoutPanel Orientation="Vertical">
<ad:LayoutDocumentPane IsMaximized="True">
<ad:LayoutDocument Title="三维视图" CanClose="False">
<!--三维窗口-->
</ad:LayoutDocument>
</ad:LayoutDocumentPane>
</ad:LayoutPanel>
</ad:LayoutPanel>
</ad:LayoutRoot>
</ad:DockingManager>
<!--StatusBar-->

运行一下:

3 增加三维控件

3.1 下载AnyCAD Rapid SDK

3.2 初始化AnyCAD控件

增加Startup和Exit消息处理

App.xaml

    <Application x:Class="RapidUI.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:RapidUI"
StartupUri="MainWindow.xaml"
Startup="Application_Startup" Exit="Application_Exit">
<Application.Resources>
<ResourceDictionary Source="pack://application:,,,/Fluent;Component/Themes/Generic.xaml" />
</Application.Resources>
</Application>

App.xaml

    public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
AnyCAD.Foundation.GlobalInstance.Initialize();
} private void Application_Exit(object sender, ExitEventArgs e)
{
AnyCAD.Foundation.GlobalInstance.Destroy();
}
}

3.3 增加AnyCAD控件引用

MainWindow.xaml

增加assembly引用:

xmlns:anycad="clr-namespace:AnyCAD.WPF;assembly=AnyCAD.WPF.NET6"

增加控件实例:

                                <!--三维窗口-->
<anycad:RenderControl Name="mView3d"/>

运行一下:

4 总结

通过整合Fluent.Ribbon、Dirkster.AvalonDock和AnyCAD Rapid .NET控件,我们可以快速搭建一个具有现代UI的三维应用程序。虽然目前看起来像简陋的毛胚房,还不够摩登,您稍加装修即可完成一座漂亮的样板间~

本文的完整代码可在gitee上下载:

https://gitee.com/anycad/rapid.net.starter/tree/master/Wpf.Ribbon

.NET6: 开发基于WPF的摩登三维工业软件的更多相关文章

  1. .NET6: 开发基于WPF的摩登三维工业软件 (2)

    在<.NET6: 开发基于WPF的摩登三维工业软件 (1)>我们创建了一个"毛坯"界面,距离摩登还差一段距离.本文将对上一阶段的成果进行深化,实现当下流行的暗黑风格UI ...

  2. .NET6: 开发基于WPF的摩登三维工业软件 (7)

    做为一个摩登的工业软件,提供可编程的脚本能力是必不可少的能力.脚本既可以方便用户进行二次开发,也对方便对程序进行自动化测试.本文将结合AnyCAD对Python脚本支持的能力和WPF快速开发带脚本编辑 ...

  3. .NET6: 开发基于WPF的摩登三维工业软件 (8) - MVVM

    基于WPF开发界面的一个很大优势是可以方便地基于MVVM设计模式开发应用.本文从应用的角度基于MVVM实现参数化管材的创建界面. 1 MVVM MVVM是Model-View-ViewModel的简写 ...

  4. .NET6: 开发基于WPF的摩登三维工业软件 (10) - 机器人

    基于前文介绍的Ribbon界面.插件化.MVVM模式等内容,我们搭建了一个软件雏形.本文将综合之前的内容在RapidCAX框架中集成Robot组件,实现一个简单的机器人正向模拟模块. 1 目标 基于M ...

  5. 封装:简要介绍自定义开发基于WPF的MVC框架

    原文:封装:简要介绍自定义开发基于WPF的MVC框架 一.目的:在使用Asp.net Core时,深感MVC框架作为页面跳转数据处理的方便,但WPF中似乎没有现成的MVC框架,由此自定义开发一套MVC ...

  6. (转)基于 WPF + Modern UI 的 公司OA小助手 开发总结

    原文地址:http://www.cnblogs.com/rainlam163/p/3365181.html 前言: 距离上一篇博客,整整一个月的时间了.人不能懒下来,必须有个阶段性的总结,算是对我这个 ...

  7. 基于 WPF + Modern UI 的 公司OA小助手 开发总结

    前言: 距离上一篇博客,整整一个月的时间了.人不能懒下来,必须有个阶段性的总结,算是对我这个阶段的一个反思.人只有在总结的过程中才会发现自己的不足. 公司每天都要在OA系统上上班点击签到,下班点击签退 ...

  8. 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇二:基于OneNote难点突破和批量识别

    篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...

  9. 快速开发基于 HTML5 网络拓扑图应用

    采用 HT 开发网络拓扑图非常容易,例如<入门手册>的第一个小例子麻雀虽小五脏俱全:http://www.hightopo.com/guide/guide/core/beginners/e ...

随机推荐

  1. RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决)

    本来今天是想做RabbitMQ之优先级队列的,但是,在RabbitMQ Server创建queue时,增加优先级的最大值,头脑发热写了9999999,导致电脑内存直接飙到100%,只能重启电脑,并卸载 ...

  2. Capstone CS5263|DP转HDMI 4K60HZ转换芯片|CS5263芯片|替代PS176芯片

    CS5263是一款DP转HDMI 4K60HZ音视频转换器芯片,不管在功能特性还是应用上都是可以完全替代兼容PS176.PS176是一个Display Port 1.2a到HDMI 2.0协议转换器, ...

  3. 编写Java程序_银行终端服务系统

    目录 一.General description 总体概述 二.About the Project 项目介绍 三.Soft function 软件功能 四.UI Model Use Case Diag ...

  4. hive 之 将excel数据导入hive中 : excel 转 txt

    一.需求: 1.客户每月上传固定格式的excel文件到指定目录.每月上传的文件名只有结尾月份不同,如: 10月文件名:  zhongdiangedan202010.xlsx  , 11月文件名: zh ...

  5. Flask + UnitTest(十五)

    被测试视图 # coding:utf-8 from flask import Flask, request, jsonify app = Flask(__name__) @app.route(&quo ...

  6. 责任链模式(python)

    rom abc import ABCMeta, abstractmethod class Handler(metaclass=ABCMeta): @abstractmethod def handle_ ...

  7. nginx 超时时间配置说明

    做excel文件导入时 报 504 错误 是nginx网关超时导致 下面几个参数貌似没效果,反正我配置不起作用 这是有问题的配置属性 ,注意   于是我换了配置 ,放在http块里 ,配置生效了 #读 ...

  8. 实验 5 :OpenFlow 协议分析和 OpenDaylight 安装

    实验 5 :OpenFlow 协议分析和 OpenDaylight 安装 一.实验目的 回顾 JDK 安装配置,了解 OpenDaylight 控制的安装,以及 Mininet 如何连接: 通过抓包获 ...

  9. vue3.0+vite+ts项目搭建--基础配置(二)

    集成vue-router 使用yarn yarn add vue-router@next --save 安装完成之后在src目录下创建文件夹router/index.ts,创建完成之后需要在Vue-R ...

  10. k个鸡蛋从N楼层摔,如果确定刚好摔碎的那个楼层,最坏情况下最少要试验x次?

    题目 k个鸡蛋从N楼层摔,如果确定刚好摔碎的那个楼层,最坏情况下最少要试验x次? 换个说法: k个鸡蛋试验x次最多可以检测N层楼.计算出N? 逆向思维和数学公式解. 分析 定义N(k,x) 如果第k个 ...