用WPF开发.NET 程序的三种用法(学习笔记)
资料主要来源,自于Autodesk官方论坛中mikko的一个范例
学习者:qjchen
本贴是本人学习WPF的入门级笔记,各位其实打开该范例文件自然就懂了,高手们见笑了~
在文中,mikko给出了一个非常有用的入门范例
。这个范例文件,非常好地给出了用VB.NET开发AUTOCAD WPF程序的三种方法
(1)采用PaletteSet面板内嵌wpf用户控件
(2)采用建立wpf控件转为wpf应用程序的方法
(3)利用.net语言直接生成wpf窗口
以下逐一进行学习讨论,并准备将其改造为c#代码方便后续的学习,并将期望将其拓展到SAP2000的开发中(经测试,SAP2000似乎还不支持WPF开发),毕竟这两种都是采用了类库开发模式,如何启动WPF窗口是一个值得学习的问题。
(1)采用PaletteSet面板工具内嵌wpf用户控件
说明:
对于这种wpf内嵌于ps面板中,Autocad官方有一个例子在此处
压缩文件中的MyPaletteWebcast文件夹就是一个面板内嵌wpf窗口的例子
Kean也写过类似的例子
还有一个例子是mjtd的翔麟曾经给过更加复杂的例子,用wpf Autocad查询一下google,你会发现第二个帖子就是了
翔麟的.net CAD开发技术是很高的,特别是国内的Autocad和wpf的研究,现在能查到的网上资料,就大部分都是他的。
过程,首先,创建一个VB.NET的类库
接着,添加 acmgd.dll和acdbmgd.dll的引用,并在项目属性中,将这两个的复制本地设为false(C#则可以直接在解决方案资源管理器中修改)。
为了WPF的应用,添加另外几个.net的引用PresentationCore, PresentationFramework, System.Windows.Form, WindowsBase, WindowsFormsIntegration
接下来,创建一个wpf控件,过程可以如下 在菜单-项目-添加用户控件 中找到wpf控件添加之,visual studio2008和2010的位置有一点点不同,并将这个用户控件重命名为 XamlCtrl.xaml
在这个用户控件的xaml中,贴入如下代码
复制代码
(可见此代码,可以直接用拖拉控件的方法得到,当然,加了一些线性渐变的颜色代码)
接下来,将默认生成的class1.vb中的代码,改为如下内容
-
- Imports Autodesk.AutoCAD.Runtime
- Imports System.Windows.Forms
- Imports System.Windows.Forms.Integration
- Public Class Class1
- Public ps As Autodesk.AutoCAD.Windows.PaletteSet
- Private eh As ElementHost
- Private ctrlXaml As XamlCtrl
- Public Sub xamlPS()
- If (ps = Nothing) Then
- ps = New Autodesk.AutoCAD.Windows.PaletteSet("Pallet Set Example", New Guid("48CFD470-D15A-434b-BC94-6ADAF073025E"))
- eh = New ElementHost()
- eh.Dock = DockStyle.Fill
- ps.Add("Pallet Set Example", eh)
- ctrlXaml = New XamlCtrl()
- ctrlXaml.InitializeComponent()
- eh.Child = ctrlXaml
- End If
- ps.Visible = True
- End Sub
- End Class
可见大部分内容还是可以接受的,就是ps这段有些复杂。不过基本也可懂,过程是创建一个面板,加入一个元素,并将XamlCtrl这个刚才创建的wpf用户自定义控件显示到此面板中。好了,可以进行一下测试。在项目属性的调试中,增加acad.exe的外部程序调试。我用2007和2011都可以调试通过。先按下F6,生成一下。
在visual studio中按F5,打开ACAD界面了,键入NETLOAD,找到你保存这个项目中的bin/debug目录,那个叫***.dll的文件就是了。加载之后,键入 xamlPS 这个我们定义的命令。看看,就是我们如下的界面了。
23snannkzyq.png
怎么样,挺高兴的吧。
接下来,你就可以添加各种你喜欢的元素了。
比如用windows expression studio 4.0直接创建各类漂亮的窗口了。 本帖以下内容被隐藏保护;需要你回复后,才能看到! 游客,如果您要查看本帖隐藏内容请 回复 |