1.编译
将msvc.bat文件拖入vs2022的x64 native tools,即可
2.about.xaml
<Windowxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"x:Class="IE_WPF_WinForms.AboutDialog"x:Name="Window"xmlns:local="clr-namespace:IE_WPF_WinForms"Title="About Import/Export Sample"Width="312" Height="285"><StackPanel Orientation="Vertical"><Label Content="Import/Export Sample," HorizontalAlignment="Center"/><Label Content="Open CASCADE Technology " HorizontalAlignment="Center"/><Image Source="res\occ_logo.bmp" Width="194" Height="100" /><Label Content="Copyright (C) 2004-2013, Open CASCADE S.A.S" HorizontalAlignment="Center"/><Label Content="http://www.opencascade.com" HorizontalAlignment="Center" FontFamily="Modern No. 20"/><Button Content="OK" HorizontalAlignment="Center" Width="75" Command="local:IECommands.AboutOk"/></StackPanel>
</Window>
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;namespace IE_WPF_WinForms
{/// <summary>/// Interaction logic for About.xaml/// </summary>public partial class AboutDialog : Window{public AboutDialog(){this.InitializeComponent();CommandBinding aBind_Ok = new CommandBinding( IECommands.AboutOk );//CommandBinding 用于将命令(例如按钮点击)与事件处理程序(例如方法)关联起来。当命令执行时,与之关联的事件处理程序将被调用,从而执行相应的逻辑。这种机制使得开发人员可以在代码中定义一次命令处理逻辑,然后在需要的地方重用该逻辑,而不必在每个界面元素上都编写事件处理程序。aBind_Ok.Executed += OkCommand_Executed;//这行代码将 OkCommand_Executed 方法添加为 aBind_Ok 对象的 Executed 事件的事件处理程序。换句话说,当 aBind_Ok 对象引发 Executed 事件时(例如,当与该命令关联的操作被触发时),OkCommand_Executed 方法将被调用来执行相应的逻辑。aBind_Ok.CanExecute += OkCommand_CanExecute;//决定aBind_Ok.Executed是否能被执行CommandBindings.Add(aBind_Ok);}private void OkCommand_Executed( object sender, ExecutedRoutedEventArgs e ){this.Close();}private void OkCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e){e.CanExecute = true;//设置为false则不可执行,如果把OkCommand_CanExecute相关的都注释掉,则默认为不可执行}}
}
2.iecommands
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Input;namespace IE_WPF_WinForms
{public class IECommands{// 定义静态属性,表示不同的命令public static RoutedUICommand New { get; private set; }public static RoutedUICommand Close { get; private set; }public static RoutedUICommand Quit { get; private set; }public static RoutedUICommand About { get; private set; }public static RoutedUICommand AboutOk { get; private set; }static IECommands(){#region menu// 创建新命令,并设置快捷键InputGestureCollection inputsNew = new InputGestureCollection();inputsNew.Add(new KeyGesture(Key.N, ModifierKeys.Control, "Ctrl + N"));New = new RoutedUICommand("New", "New", typeof(IECommands), inputsNew);// 创建关闭命令Close = new RoutedUICommand("Close", "Close", typeof(IECommands));// 创建退出命令,并设置快捷键InputGestureCollection inputsQuit = new InputGestureCollection();inputsQuit.Add(new KeyGesture(Key.F4, ModifierKeys.Alt, "Alt + F4"));Quit = new RoutedUICommand("Quit", "Quit", typeof(IECommands), inputsQuit);// 创建关于命令,并设置快捷键InputGestureCollection inputsAbout = new InputGestureCollection();inputsAbout.Add(new KeyGesture(Key.F1));About = new RoutedUICommand("About", "About", typeof(IECommands), inputsAbout);#endregion#region aboutDlg// 创建关于对话框确定命令,并设置快捷键InputGestureCollection inputsAboutOk = new InputGestureCollection();inputsAboutOk.Add(new KeyGesture(Key.Enter));AboutOk = new RoutedUICommand("AboutOk", "AboutOk", typeof(IECommands), inputsAboutOk);#endregion}}
}
这段代码定义了一个静态类 IECommands
,其中包含了几个静态属性,每个属性表示一个命令。每个命令都是一个 RoutedUICommand
类型的对象,用于处理 WPF 应用程序中的命令操作。具体注释如下:
public static RoutedUICommand New { get; private set; }
:表示新建命令。public static RoutedUICommand Close { get; private set; }
:表示关闭命令。public static RoutedUICommand Quit { get; private set; }
:表示退出命令。public static RoutedUICommand About { get; private set; }
:表示关于命令。public static RoutedUICommand AboutOk { get; private set; }
:表示关于对话框确定命令。
在静态构造函数中,每个命令对象都被实例化并初始化,其中包括命令名称、显示文本和快捷键等信息。
3.mainwindow.xaml
<Windowxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" <!-- 命名空间定义 -->xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" <!-- 命名空间定义 -->x:Class="IE_WPF_WinForms.MainWindow" <!-- 定义窗口类 -->xmlns:local="clr-namespace:IE_WPF_WinForms" <!-- 命名空间定义 -->Title="Sample Import/Export" Height="600" Width="900" Icon="res/MainFrame.ico"> <!-- 窗口标题、大小、图标 --><Window.Background> <!-- 设置窗口背景 --><SolidColorBrush Color="{DynamicResource {x:Static SystemColors.ControlDarkColorKey}}"/> <!-- 使用动态资源设置背景颜色 --></Window.Background><Window.Resources> <!-- 设置窗口资源 --><BooleanToVisibilityConverter x:Key="boolToVisibilityConverter"/> <!-- 定义布尔值转换为可见性的转换器 --></Window.Resources><Grid> <!-- 定义主体布局为网格 --><Grid.RowDefinitions> <!-- 定义网格行 --><RowDefinition Height="auto"/> <!-- 第一行高度自适应 --><RowDefinition Height="auto"/> <!-- 第二行高度自适应 --><RowDefinition /> <!-- 第三行高度为剩余空间 --><RowDefinition Height="auto"/> <!-- 第四行高度自适应 --></Grid.RowDefinitions><Menu Height="25" Grid.Row="0"> <!-- 菜单栏,位于第一行 --><MenuItem Header="File"> <!-- 文件菜单项 --><MenuItem Command="local:IECommands.New"/> <!-- 新建命令 --><MenuItem Command="local:IECommands.Close"/> <!-- 关闭命令 --><MenuItem Header="Import" IsEnabled="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=IsDocumentOpen}"> <!-- 导入子菜单 --><MenuItem Name="ImportBrep" Header="BRep..." Click="ImportBRep_Click"/> <!-- BRep 导入选项 --><MenuItem Name="ImportIges" Header="Iges..." Click="ImportIges_Click"/> <!-- Iges 导入选项 --><MenuItem Name="ImportStep" Header="Step..." Click="ImportStep_Click"/> <!-- Step 导入选项 --在这段 XAML 代码中,最下面的 </MenuItem> 标签表示对 <MenuItem> 元素的闭合,它用于结束一个 MenuItem 的定义。></MenuItem><MenuItem Header="Export" IsEnabled="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=IsDocumentOpen}"> <!-- 导出子菜单 --><MenuItem Name="ExportBrep" Header="BRep..." Click="ExportBRep_Click"/> <!-- BRep 导出选项 --><MenuItem Name="ExportIges" Header="Iges..." Click="ExportIges_Click"/> <!-- Iges 导出选项 --><MenuItem Name="ExportStep" Header="Step..." Click="ExportStep_Click"/> <!-- Step 导出选项 --><MenuItem Name="ExportStl" Header="Stl..." Click="ExportStl_Click"/> <!-- Stl 导出选项 --><MenuItem Name="ExportVrml" Header="Vrml..." Click="ExportVrml_Click"/> <!-- Vrml 导出选项 --><Separator/> <!-- 分隔线 --><MenuItem Name="ExportImage" Header="Image..." Click="ExportImage_Click"/> <!-- 图像导出选项 --></MenuItem><Separator/> <!-- 分隔线 --><MenuItem Command="local:IECommands.Quit"/> <!-- 退出命令 --></MenuItem><MenuItem Header="View"> <!-- 视图菜单项 --><MenuItem Name="ActivateToolbar" IsCheckable="True" IsChecked="True" Header="Toolbar"/> <!-- 工具栏显示/隐藏选项 --><MenuItem Name="ActivateStatusbar" IsCheckable="True" IsChecked="True" Header="Statusbar"/> <!-- 状态栏显示/隐藏选项 --></MenuItem><MenuItem Header="Help"> <!-- 帮助菜单项 --><MenuItem Header="About" Command="local:IECommands.About"/> <!-- 关于命令 --></MenuItem></Menu><ToolBarTray Background="White" Grid.Row="1"> <!-- 工具栏托盘,位于第二行 --><ToolBar Name="ToolBar" Band="1" BandIndex="1" <!-- 工具栏 -->Visibility="{Binding ElementName=ActivateToolbar, Path=IsChecked, Converter={StaticResource boolToVisibilityConverter}}" <!-- 根据绑定的可见性属性显示/隐藏工具栏 -->MouseEnter="ToolBar_MouseEnter" MouseLeave="ToolBar_MouseLeave"> <!-- 鼠标进入/离开事件 --><Button ToolTip="New" Command="local:IECommands.New"> <!-- 新建按钮 --><Image Source="res/new.png" Style="{StaticResource toolbarImageStyle}"/> <!-- 图像 --></Button><Button ToolTip="About" Command="local:IECommands.About"> <!-- 关于按钮 --><Image Source="res/help.png" Style="{StaticResource toolbarImageStyle}"/> <!-- 图像 --></Button></ToolBar><!-- 其他工具栏按钮省略 --></ToolBarTray><TabControl Name="ViewPanel" Grid.Row="2" <!-- 标签页控件,位于第三行 -->SelectionChanged="OnViewerChanged" <!-- 选择改变事件 -->Visibility="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=IsDocumentOpen, Converter={StaticResource boolToVisibilityConverter}}"> <!-- 根据绑定的可见性属性显示/隐藏标签页 --><TabControl.ContextMenu> <!-- 标签页右键菜单 --><ContextMenu><MenuItem Command="local:IECommands.New" Style="{StaticResource popupItem}"/> <!-- 新建命令 --><MenuItem Command="local:IECommands.Close" Style="{StaticResource popupItem}"/> <!-- 关闭命令 --></ContextMenu></TabControl.ContextMenu></TabControl><StatusBar Background="White" Grid.Row="3" Visibility="{Binding ElementName=ActivateStatusbar, Path=IsChecked, Converter={StaticResource boolToVisibilityConverter}}"> <!-- 状态栏,位于第四行 --><TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=StatusBarText}"/> <!-- 状态栏文本 --></StatusBar></Grid>
</Window>