我想重写一个我的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电子表格中添加材料),但它不符合我期望在顶层看到的内容。
通过简单地将Windows从WPF应用程序项目复制到类库项目中,可以轻松解决第三个问题。但我真的不明白类库如何在不遵循模板中的app.cs代码的情况下在Revit中实例化。是否有其他人以这种方式创建插件,如果是这样,你能让我参与任何有用的技巧或讨论吗?有没有人为Visual Studio创建了WPF Revit插件模板?
当我添加一个WPF窗口并尝试实例化它时,我收到一个错误,它无法找到xaml资源(System.IO.IOException:找不到资源'xxxx.xaml')。我试图根据谷歌搜索此错误时发现的建议来解决这个问题,但无济于事。我认为它来自于基于表单的项目,我可能只需要从没有表单的新项目开始。
我现在已经确认你确实可以从Revit AddIn Wizzard开始并使用WPF。 。 。我从头开始并复制到另一个项目中创建的窗口中并使其运行(在添加各种引用,命名空间等之后)。所以我的问题似乎只是原来的项目已经添加了一堆表单。
答案 0 :(得分:3)
是的,我正在使用WPF创建Revit Addins。它运作良好。您可以从SDK示例轻松创建自己的WPF模板:
我并不是特别熟悉AddMaterials项目,而是要澄清你的要点。
Revit Addins - 它不是文件名(app.cs),而是必须扩展IExternalApplication
或IExternalCommand
。如果要创建xaml接口(而不是仅仅从功能区按钮运行命令),则将使用“IExternalApplication”作为入口点。在示例中查找类似的内容:
public class ThisApplication : IExternalApplication ...
我没有使用顶级app.xaml,而是使用了Rev.x应用程序调用的page.xaml页面。在我的例子中,这些是Pages而不是Windows,它们扩展了IDockablePaneProvider类。这些必须在应用程序中注册,然后可以显示,隐藏等等您的窗格。我认为这对Windows来说更简单,但我自己并没有这样做。对于可停靠的窗格,您的xaml.cs应该从以下内容开始:
public partial class MainPage : Page, Autodesk.Revit.UI.IDockablePaneProvider ...
是的,项目是一个类库,因为它是一个类的集合,其中至少有一个扩展了IExternalApplication
或IExternalCommand
。请记住,您不是在创建独立应用程序,而是在现有Windows应用程序(Revit)中添加功能。 Revit将实例化ThisApplication
类,然后在Revit应用程序启动时调用其.OnStartup()
方法。但是,这不应该阻止您将.xaml或.cs文件添加到项目中。我可以使用 Ctrl-Shift-A 使用VS Community 2015来实现。
希望这能让你开始 - 我已经能够在没有任何WPF经验的情况下在Revit中实现WPF UI,而且我甚至都不是真正的程序员,所以它绝对可能。祝你好运!
<强>附录强>
如果您想将WPF元素添加到现有的revit插件中,可以按照此处的说明进行操作:How can I connect xaml and xaml.cs files
最终,我发现将插件代码迁移到由工作示例制作的模板中更容易,您可能也想尝试这种方法。