在XAML控件定义中使用来自Resources的DataTemplate的x:key属性

时间:2013-09-17 07:50:18

标签: c# wpf xaml wpf-controls

我有一个名为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控件。它发生在NodeItemDesigner应用程序中的机器人。

我的问题是:我做错了什么,如何修复代码以在两个应用程序中都有工作控制权。谢谢你的关注。

1 个答案:

答案 0 :(得分:1)

您是否在GraphModel项目中添加了对Package程序集的引用?你如何尝试在该应用程序中使用它?您已上传空的用户控件,是否也可以上传包含Items源的部件。我问的是因为您传递给GraphControl的商品必须是GraphModel:NodeViewModel类型才能应用该模板。

我认为它的工作原理只有x:Key,因为您不在应用程序中使用它(该密钥只能在GraphControl StaticResourceDynamicResource中使用,因为您在GraphControl资源级别上声明了DataTemplate。因此,在结果中,您有没有模板的小项目,并且GraphModel:NodeViewModel中不需要出现。