WPF Revit 插件的最佳起点

Pau*_*son 2 wpf mvvm revit-api

我想重写我的 Revit 插件之一,以便它通过 MVVM 使用 WPF,因为与 Windows 窗体相比,我更喜欢 WPF 的外观和功能。

我已将 Jeremy Tammik 的 Revit 模板向导用于基于表单的加载项,但添加 WPF 用户控件似乎不起作用(无法找到 xaml 资源的运行时错误)。

我在示例中找到了一个 WPF MVVM revit add(AddMaterials,这里是 github 链接,它将从 Excel 电子表格添加材料),但它不符合我期望在顶层看到的内容。

  • Revit Add ins 有一个 app.cs 文件,它告诉 Revit 如何注册和访问 DLL(功能区面板按钮等)。
  • Windows WPF 应用程序将 app.xaml 作为顶级入口点。
  • 添加材料项目两者都没有,这告诉我它必须是一个类库,但是视图没有使用 UserControls,而是我更喜欢的 Windows。但是,Visual Studio 不允许您为类库类型项目添加窗口。

第三个问题很容易解决,只需将 WPF 应用程序项目中的窗口复制到类库项目中即可。但我不太明白如果不遵循模板中的 app.cs 代码,类库将如何在 Revit 中实例化。还有其他人以这种方式创建加载项吗?如果是的话,您能让我了解任何有帮助的技巧或讨论吗?有人为 Visual Studio 创建了 WPF Revit 插件模板吗?

当我添加 WPF 窗口并尝试实例化它时,出现错误,指出找不到 xaml 资源(System.IO.IOException:无法找到资源“xxxx.xaml”)。我尝试根据谷歌搜索此错误时找到的建议来修复此问题,但无济于事。我认为它来自于基于表单的项目,并且我可能必须从一个没有表单内容的新项目开始。

我现在已经验证,您确实可以从 Revit AddIn Wizard 开始并使用 WPF 。。。我从头开始,复制到另一个项目中创建的窗口中并让它运行(在添加各种引用、命名空间等之后)。所以我的问题似乎只是与原始项目有关,它已经添加了一堆表单内容。

小智 5

是的,我正在使用 WPF 创建 Revit 插件。效果很好。您可以从 SDK 示例轻松创建自己的 WPF 模板:

  1. 从 Autodesk 提供的 SDK 示例之一开始。我使用了“DockableDialogs”示例。我知道这个有效,你的里程可能与其他的不同。如果您要在 UI 中查找窗口而不是停靠窗格,则另一个示例(可能是 AddMaterials 示例)可能更简单。
  2. 我使用 Visual Studio 将示例转换为模板。文件 - 导出模板 -> 选择“DockableDialogs”或其他 WPF 示例项目。
  3. 根据您刚刚创建的模板创建一个新项目。这是我能找到的正确连接 WPF 内部位的最简单方法。

我不太熟悉 AddMaterials 项目,但为了澄清您的要点。

  1. Revit 插件 - 这不是文件名 (app.cs),而是它们必须扩展IExternalApplicationIExternalCommand. 如果您要创建 xaml 界面(而不仅仅是从功能区按钮运行命令),您将使用“IExternalApplication”作为入口点。在示例中查找类似的内容:

    public class ThisApplication : IExternalApplication ...
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我没有使用顶级 app.xaml,而是使用 Revit 应用程序调用的 page.xaml 页面。就我而言,这些是页面而不是 Windows,它们扩展了 IDockablePaneProvider 类。这些必须在应用程序中注册,然后可以显示、隐藏您的窗格等。我想这对于 Windows 来说会更简单,但我自己还没有这样做过。对于可停靠窗格,您的 xaml.cs 应该以如下形式开始:

      public partial class MainPage : Page, Autodesk.Revit.UI.IDockablePaneProvider ...
    
    Run Code Online (Sandbox Code Playgroud)
  3. 是的,该项目是一个类库,因为它是类的集合,至少其中一个扩展IExternalApplicationIExternalCommand. 请记住,您不是在创建独立的应用程序,而是向现有 Windows 应用程序 (Revit) 添加功能。Revit 将实例化该类ThisApplication,然后.OnStartup()在 Revit 应用程序启动时调用其方法。不过,这不应阻止您向项目添加 .xaml 或 .cs 文件。我可以使用 VS Community 2015 使用Ctrl-Shift-A.

希望这能让您入门 - 我已经能够在 Revit 中实现 WPF UI,而无需任何先前的 WPF 经验,而且我什至不是真正的程序员,所以这绝对是可能的。祝你好运!

附录

如果要将 WPF 元素添加到现有的 Revit 插件,可以按照此处的说明操作:如何连接 xaml 和 xaml.cs 文件

最终,我发现将我的插件代码迁移到由工作示例制作的模板中更容易,您可能也想尝试这种方法。