0

我有 WPF Application 调用Designer,其中MainWindow(派生自Window)和GraphControl(派生自UserControl)类放置在DesignerAssembly(设置为启动项目)中。应用程序使用了一些其他的程序集,其中的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正常工作,因为它被发明了。之后,我创建了新Visual Studio Package项目,为 VS2012 制作自定义编辑器,我需要在项目中使用我GraphControl的 from Designerassembly 。Package我注意到我在Package项目中合并 WPF 控件的尝试导致异常:

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未显示在屏幕上,但我只看到一个奇怪的小控件看起来像TextBlockGraphModel.NodeViewModel文本,而不是原始NodeItem控件。它发生在机器人DesignerPackage应用程序中。

我的问题是:我做错了什么,我应该如何修复代码以在两个应用程序中进行工作控制。感谢您的关注。

4

1 回答 1

1

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

在我看来,它之所以起作用x:Key,只是因为您不在应用程序中使用它(该键只能在GraphControlwith StaticResourceor中使用,因为您在资源级别DynamicResource声明了 DataTemplate )。GraphControl所以结果你有没有模板的小项目,并且不需要GraphModel:NodeViewModel发生。

于 2013-09-17T10:58:58.427 回答