WPF Revit的最佳起点加入

时间:2016-10-17 22:42:12

标签: wpf mvvm revit-api

我想重写一个我的Revit Add ins,以便它将WPF与MVVM结合使用,因为我比WPF更喜欢WPF的外观和功能。

我使用了Jeremy Tammik的Revit Template Wizzard进行基于表单的添加,但添加WPF用户控件似乎无法正常工作(无法找到xaml资源的运行时错误)。

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

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

通过简单地将Windows从WPF应用程序项目复制到类库项目中,可以轻松解决第三个问题。但我真的不明白类库如何在不遵循模板中的app.cs代码的情况下在Revit中实例化。是否有其他人以这种方式创建插件,如果是这样,你能让我参与任何有用的技巧或讨论吗?有没有人为Visual Studio创建了WPF Revit插件模板?

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

我现在已经确认你确实可以从Revit AddIn Wizzard开始并使用WPF。 。 。我从头开始并复制到另一个项目中创建的窗口中并使其运行(在添加各种引用,命名空间等之后)。所以我的问题似乎只是原来的项目已经添加了一堆表单。

1 个答案:

答案 0 :(得分:3)

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

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

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

      public class ThisApplication : IExternalApplication ...
      
    2. 我没有使用顶级app.xaml,而是使用了Rev.x应用程序调用的page.xaml页面。在我的例子中,这些是Pages而不是Windows,它们扩展了IDockablePaneProvider类。这些必须在应用程序中注册,然后可以显示,隐藏等等您的窗格。我认为这对Windows来说更简单,但我自己并没有这样做。对于可停靠的窗格,您的xaml.cs应该从以下内容开始:

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

    4. 希望这能让你开始 - 我已经能够在没有任何WPF经验的情况下在Revit中实现WPF UI,而且我甚至都不是真正的程序员,所以它绝对可能。祝你好运!

      <强>附录

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

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