WPF应用程序基类?

acr*_*ron 6 wpf inheritance

我甚至不确定这是否可行,但我刚刚在一些新项目上开始了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.

我可以通过在本地命名空间中创建一个代理类并从库类派生它来避免这个问题...但它有点臭.

Jef*_*ado 11

我怀疑这是因为底层的XAML根仍然是一个Application相反的MyFrameworkApplication.我猜测生成的baml使用root作为它的父类.尝试将其更改为适当的名称.

例如,

<z:MyFrameworkApplication x:Class="MyNamespace.App"
             ...
             xmlns:z="clr-namespace:MyNamespace">
    ...
</z:MyFrameworkApplication>
Run Code Online (Sandbox Code Playgroud)

看来我的怀疑是正确的.

Code-Behind中的文档和WPF中的XAML:

WPF中的代码隐藏,事件处理程序和部分类要求

  • 部分类必须从支持根元素的类型派生.(强调我的)
  • 请注意,在标记编译构建操作的默认行为下,您可以将派生空白留在代码隐藏方的部分类定义中.编译结果将假定页根的支持类型是部分类的基础,即使未指定.但是,依赖此行为并非最佳做法.
  • 您在后面的代码中编写的事件处理程序必须是实例方法,不能是静态方法.这些方法必须由x:Class标识的CLR命名空间中的partial类定义.您无法限定事件处理程序的名称,以指示XAML处理器在不同的类范围内查找事件连接的事件处理程序.
  • 处理程序必须匹配支持类型系统中相应事件的委托.
  • 特别是对于Microsoft Visual Basic语言,您可以使用特定于语言的Handles关键字将处理程序与处理程序声明中的实例和事件相关联,而不是在XAML中附加具有属性的处理程序.但是,此技术确实存在一些限制,因为Handles关键字无法支持WPF事件系统的所有特定功能,例如某些路由事件方案或附加事件.有关详细信息,请参阅Visual Basic和WPF事件处理.

代码隐藏和xaml中的根应用程序类型必须一致.