我有一个名为Designer
的WPF应用程序,其中MainWindow
(派生自Window
)和GraphControl
(派生自UserControl
)类放在{{ 1}}程序集(设置为启动项目)。应用程序使用一些其他程序集,其中包括Designer
程序集,其中包含已使用控件的视图模型。
我在GraphModel
中的DataTemplate
声明很少,即(简化列表):
GraphControl.xaml
应用程序<UserControl x:Class="Designer.GraphControl"
xmlns:GraphModel="clr-namespace:GraphModel;assembly=GraphModel">
<UserControl.Resources>
<ResourceDictionary>
<DataTemplate DataType="{x:Type GraphModel:NodeViewModel}">
<!-- (...) -->
</DataTemplate>
</ResourceDictionary>
</UserControl.Resources>
</UserControl>
正常发挥作用。之后,我创建了新的Designer
项目,为VS2012制作自定义编辑器,我需要在Visual Studio Package
项目中使用来自GraphControl
程序集的Designer
。我注意到我在Package
项目中合并WPF控件的试验导致异常:
Package
此后,我发现如果我将System.Windows.Markup.XamlParseException
Message=Set property 'System.Windows.ResourceDictionary.DeferrableContent' threw an exception.
Source=PresentationFramework
LineNumber=0
LinePosition=0
InnerException: System.IO.FileNotFoundException
Source=mscorlib
Message=Could not load file or assembly 'GraphModel, PublicKeyToken=c2639211081ade27' or one of its dependencies. The system cannot find the file specified.
属性添加到上述x:key
元素,则不会引发上述异常,并且DataTemplate
应用程序和Designer
中会显示控件应用程序,但由Package
表示的UI元素(NodeItem
控件)未显示在屏幕上,但我看到只有一个奇怪的小控件,如NodeViewModel
,带有 GraphModel。 NodeViewModel 文本,而不是原始TextBlock
控件。它发生在NodeItem
和Designer
应用程序中的机器人。
我的问题是:我做错了什么,如何修复代码以在两个应用程序中都有工作控制权。谢谢你的关注。
答案 0 :(得分:1)
您是否在GraphModel
项目中添加了对Package
程序集的引用?你如何尝试在该应用程序中使用它?您已上传空的用户控件,是否也可以上传包含Items源的部件。我问的是因为您传递给GraphControl
的商品必须是GraphModel:NodeViewModel
类型才能应用该模板。
我认为它的工作原理只有x:Key
,因为您不在应用程序中使用它(该密钥只能在GraphControl
StaticResource
或DynamicResource
中使用,因为您在GraphControl
资源级别上声明了DataTemplate。因此,在结果中,您有没有模板的小项目,并且GraphModel:NodeViewModel
中不需要出现。