我甚至不确定这是否可行,但我刚刚在一些新项目上开始了WPF开发,并尝试通过创建一个迷你框架来完成一些常见功能。就像异常处理和线程管理一样。
我想做的是替换这一行......
public partial class App : Application
与
public partial class App : MyFrameworkApplication
我已经设置并引用了库,但是我收到了关于'部分'声明的App
类的错误,可能是因为它仍然引用了旧的基类。
有什么想法吗?感谢。
编辑:@Jeff M:不,你的解决方案没有用。我怀疑是因为MyFrameworkApplication
实际上在库中,z
命名空间声明无法识别库的命名空间。我在App.xaml.cs中引用了它,但可疑的错误是:
Error 3 Undefined CLR namespace. The 'clr-namespace' URI refers to a namespace 'MyLibraryNamespace' that is not included in the assembly.
我可以通过在本地命名空间中创建一个代理类并从库类派生它来解决这个问题......但它有点臭。
答案 0 :(得分:11)
我怀疑是因为底层XAML根仍然是Application
而不是MyFrameworkApplication
。我猜测生成的baml使用root作为它的父类。尝试将其更改为适当的名称。
如,
<z:MyFrameworkApplication x:Class="MyNamespace.App"
...
xmlns:z="clr-namespace:MyNamespace">
...
</z:MyFrameworkApplication>
看来我的怀疑是正确的。
来自Code-Behind and XAML in WPF中的文档:
WPF中的代码隐藏,事件处理程序和部分类要求
- 部分类必须来自支持根元素的类型。 (强调我的)
- 请注意,在标记编译构建操作的默认行为下,您可以将派生空白留在分部类中 代码隐藏方面的定义。编译结果将假定 页面根的支持类型是部分类的基础, 即使没有说明。但是,依靠这种行为不是一个 最佳实践。
- 您在后面的代码中编写的事件处理程序必须是实例方法,不能是静态方法。这些方法必须由 CLR命名空间中由 x:Class 标识的部分类。您 无法限定事件处理程序的名称来指示XAML 处理器为不同的事件接线寻找事件处理程序 班级范围。
- 处理程序必须与支持类型系统中相应事件的委托匹配。
- 对于Microsoft Visual Basic语言,您可以使用特定于语言的句柄关键字将处理程序与 处理程序声明中的实例和事件,而不是附加 在XAML中具有属性的处理程序。但是,这种技术确实有 一些限制,因为句柄关键字不能支持所有 WPF事件系统的特定功能,例如某些路由 事件场景或附加事件。有关详细信息,请参阅Visual Basic and WPF Event Handling。
代码隐藏和xaml中的根应用程序类型必须同意。