我有一个带有 xaml 的控件库和 xaml 的视图模型。它们由单独的 App exe 项目加载。我更改了库项目中的视图模型类,使其具有无参数构造函数,以允许项目的某些设计时渲染。然后,我构建了控制库项目并进行了渲染,但没有设计时数据。在带有
d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=False}"
的行上,编辑器会突出显示带有 No parameterless constructor defined
的行。但是,我已经定义了带有 0 个参数的构造函数并重建了库。如果我创建一个新的 ViewModel 类来进行测试,它将使用智能感知自动完成类名称,但随后会显示错误Could not load type 'MyNamespace.MyViewModelTest' from assembly 'MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'
。为什么设计师不接受这些变化?
问题是您必须构建应用程序项目,而不仅仅是控件库项目。
一开始这可能看起来很奇怪,因为如果您的控件库没有其他依赖项,但 Visual Studio 设计器正在尝试帮助检测主应用程序项目中主应用程序的
App.xaml
的样式和主题。它知道,即使您的控件库与主应用程序项目没有直接依赖关系,也存在可以共享的隐式资源(App.xaml 和主题中的资源)。
Visual Studio 2022 使用名为
SurfaceApp.exe
的设计器进程,该进程将从 Application 项目的输出文件夹(通常位于 bin
下)中提取 dll(如果有),而不是控件库的输出文件夹。这意味着您必须从应用程序项目(而不是控件库)进行构建,才能更新设计人员所看到的内容。