在项目之间的代码中扩展WPF窗口

时间:2014-04-13 21:01:10

标签: c# wpf xaml extending

我有一个XAML / cs类(EditorWindow),它派生自Window并实现了一些特殊功能。 我还有一个.cs文件中的子类,它源自EditorWindow(公共类DetailedEditorWindow:EditorWindow)。

如果这两个都在同一个项目中,我可以正常打开DetailedEditorWindow(如果它们位于不同的命名空间中没有区别),但如果我将DetailedEditorWindow移动到另一个引用EditorWindow的项目,我会得到一个资源缺失SystemException - 说它错过了EditorWindow.xaml。

为什么会这样,我该如何解决此错误?

提前谢谢你, JasonX

1 个答案:

答案 0 :(得分:1)

之所以发生这种情况是因为EditorWindow是一个部分类,并且不能只用.cs需要xaml代码才能运行。当您将DetailedEditorWindow放入外部程序集并创建实例时,它也将调用EditorWindow构造函数。但是这将尝试查找内部使用本地资源Uri引用的XAML文件。这个Uri无法在您的第二个项目中得到解决。我不认为你可以为此做些什么。

您可以在.csproj文件中看到此引用:

<Compile Include="MainWindow.xaml.cs">
  <DependentUpon>MainWindow.xaml</DependentUpon>
  <SubType>Code</SubType>
</Compile>

在这种情况下,您可以创建一个没有XAML的窗口并在里面实现您的逻辑。然后从它继承EditorWindow和DetailedEditorWindow。但是,您无法通过名称引用Xaml控件。

另一种可能性是使用自定义控件+样式来实现所有逻辑,你的窗口将只托管这个控件。