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 电子表格中添加材料)但它不符合我在顶部看到的内容等级。
- Revit 加载项有一个 app.cs 文件,告诉 Revit 如何注册和访问 DLL(功能区面板按钮等)。
- windows WPF 应用程序将 app.xaml 作为顶级入口点。
- Add Materials 项目没有告诉我它必须是
class 库,但是视图没有使用 UserControls
相反,它们是我更喜欢的 Windows。然而 Visual Studio 没有
让您为 Class 库类型项目添加 Window。
第三个问题很容易解决,只需将 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 模板:
- 从 Autodesk 提供的 SDK 示例之一开始。我使用了 "DockableDialogs" 样本。我知道这个有效,您的里程可能会因其他人而异。如果您正在寻找 windows 而不是 UI 中的停靠窗格,另一个示例(可能是 AddMaterials 示例)可能更简单。
- 我用Visual Studio把样本变成了模板。文件 - 导出模板 -> select "DockableDialogs" 或其他 WPF 示例项目。
- 根据您刚刚创建的模板创建一个新项目。这是我能找到的正确连接 WPF 内部位的最简单方法。
我不是特别熟悉 AddMaterials 项目,但要澄清你的要点。
Revit Addins - 这不是文件名 (app.cs),而是它们必须扩展 IExternalApplication
或 IExternalCommand
。如果您正在创建一个 xaml 界面(而不只是 运行 来自功能区按钮的命令),您将使用 'IExternalApplication' 作为您的入口点。在示例中查找类似这样的内容:
public class ThisApplication : IExternalApplication ...
我没有使用顶层 app.xaml,而是使用 Revit 应用程序调用的 page.xaml 页面。在我的例子中,这些是页面而不是 Windows,它扩展了 IDockablePaneProvider class。这些必须在应用程序中注册,然后才能显示、隐藏等您的窗格。我想使用 Windows 会更简单,但我自己还没有这样做。对于可停靠窗格,您的 xaml.cs 应该像这样开始:
public partial class MainPage : Page, Autodesk.Revit.UI.IDockablePaneProvider ...
是的,该项目是一个 class 库,因为它是 classes 的集合,其中至少有一个扩展 IExternalApplication
或IExternalCommand
。请记住,您不是在创建独立的应用程序,而是向现有 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
最终我发现将我的插件代码迁移到由工作示例制作的模板中更容易,您可能也想尝试这种方法。
我想重写我的一个 Revit 加载项,以便它使用 WPF 和 MVVM,因为我喜欢 WPF 的外观和功能胜过 Windows Forms。
我已经将 Jeremy Tammik 的 Revit Template Wizzard 用于基于表单的加载项,但添加 WPF 用户控件似乎不起作用(运行 时间错误,xaml 资源无法被发现)。
我在示例中找到了 WPF MVVM revit 添加(AddMaterials,here is the github link,它将从 Excel 电子表格中添加材料)但它不符合我在顶部看到的内容等级。
- Revit 加载项有一个 app.cs 文件,告诉 Revit 如何注册和访问 DLL(功能区面板按钮等)。
- windows WPF 应用程序将 app.xaml 作为顶级入口点。
- Add Materials 项目没有告诉我它必须是 class 库,但是视图没有使用 UserControls 相反,它们是我更喜欢的 Windows。然而 Visual Studio 没有 让您为 Class 库类型项目添加 Window。
第三个问题很容易解决,只需将 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 模板:
- 从 Autodesk 提供的 SDK 示例之一开始。我使用了 "DockableDialogs" 样本。我知道这个有效,您的里程可能会因其他人而异。如果您正在寻找 windows 而不是 UI 中的停靠窗格,另一个示例(可能是 AddMaterials 示例)可能更简单。
- 我用Visual Studio把样本变成了模板。文件 - 导出模板 -> select "DockableDialogs" 或其他 WPF 示例项目。
- 根据您刚刚创建的模板创建一个新项目。这是我能找到的正确连接 WPF 内部位的最简单方法。
我不是特别熟悉 AddMaterials 项目,但要澄清你的要点。
Revit Addins - 这不是文件名 (app.cs),而是它们必须扩展
IExternalApplication
或IExternalCommand
。如果您正在创建一个 xaml 界面(而不只是 运行 来自功能区按钮的命令),您将使用 'IExternalApplication' 作为您的入口点。在示例中查找类似这样的内容:public class ThisApplication : IExternalApplication ...
我没有使用顶层 app.xaml,而是使用 Revit 应用程序调用的 page.xaml 页面。在我的例子中,这些是页面而不是 Windows,它扩展了 IDockablePaneProvider class。这些必须在应用程序中注册,然后才能显示、隐藏等您的窗格。我想使用 Windows 会更简单,但我自己还没有这样做。对于可停靠窗格,您的 xaml.cs 应该像这样开始:
public partial class MainPage : Page, Autodesk.Revit.UI.IDockablePaneProvider ...
是的,该项目是一个 class 库,因为它是 classes 的集合,其中至少有一个扩展
IExternalApplication
或IExternalCommand
。请记住,您不是在创建独立的应用程序,而是向现有 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
最终我发现将我的插件代码迁移到由工作示例制作的模板中更容易,您可能也想尝试这种方法。