WPF Revit 加载项的最佳起点

Best Starting Point for WPF Revit Add in

我想重写我的一个 Revit 加载项,以便它使用 WPF 和 MVVM,因为我喜欢 WPF 的外观和功能胜过 Windows Forms。

我已经将 Jeremy Tammik 的 Revit Template Wizzard 用于基于表单的加载项,但添加 WPF 用户控件似乎不起作用(运行 时间错误,xaml 资源无法被发现)。

我在示例中找到了 WPF MVVM revit 添加(AddMaterials,here is the github link,它将从 Excel 电子表格中添加材料)但它不符合我在顶部看到的内容等级。

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

当我添加一个 WPF window 并尝试实例化它时,我得到一个错误,它找不到 xaml 资源(System.IO.IOException:找不到资源 'xxxx.xaml' ).我试图根据谷歌搜索此错误时发现的建议来解决此问题,但无济于事。我认为它来自基于表单的项目,我可能不得不从一个没有表单内容的新项目开始。

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

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

  1. 从 Autodesk 提供的 SDK 示例之一开始。我使用了 "DockableDialogs" 样本。我知道这个有效,您的里程可能会因其他人而异。如果您正在寻找 windows 而不是 UI 中的停靠窗格,另一个示例(可能是 AddMaterials 示例)可能更简单。
  2. 我用Visual Studio把样本变成了模板。文件 - 导出模板 -> select "DockableDialogs" 或其他 WPF 示例项目。
  3. 根据您刚刚创建的模板创建一个新项目。这是我能找到的正确连接 WPF 内部位的最简单方法。

我不是特别熟悉 AddMaterials 项目,但要澄清你的要点。

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

    public class ThisApplication : IExternalApplication ...
    
  2. 我没有使用顶层 app.xaml,而是使用 Revit 应用程序调用的 page.xaml 页面。在我的例子中,这些是页面而不是 Windows,它扩展了 IDockablePaneProvider class。这些必须在应用程序中注册,然后才能显示、隐藏等您的窗格。我想使用 Windows 会更简单,但我自己还没有这样做。对于可停靠窗格,您的 xaml.cs 应该像这样开始:

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

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

附录

如果要将 WPF 元素添加到现有的 revit 插件,可以按照此处的说明进行操作:How can I connect xaml and xaml.cs files

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