WPF中如何通过App.Current获取App.xaml.cs的非静态字段?
报错原因
App.Current的默认返回类型是WPF提供的Application基类,你自定义的IsUserLoggedIn属性是定义在自己写的App派生类中的,基类本身不包含这个成员,直接通过基类类型的引用调用派生类独有的成员,就会触发编译错误。
修复方案
方案1:临时强转(单次使用推荐)
直接在调用位置把App.Current显式转换为你项目中的App类型即可,修改EventTable.cs的代码如下:
internal class EventTable { private void UpdateEvents() { if (((App)App.Current).IsUserLoggedIn) { // 此处写登录后的业务逻辑 } } }
方案2:新增类型化静态属性(多处调用推荐)
如果项目里很多地方都要访问App类的自定义成员,可以直接在App.xaml.cs里加一个静态属性,提前做好类型转换,后续所有地方调用都不需要重复写强转逻辑:
首先修改App.xaml.cs的代码:
public partial class App : Application { // 新增强转后的当前实例静态访问属性 internal new static App Current => (App)Application.Current; internal bool IsUserLoggedIn { get; private set; } }
之后所有类里访问时直接用下面的写法即可,不会再触发编译错误:
if (App.Current.IsUserLoggedIn) { // 业务逻辑 }
说明:WPF默认启动流程下,
Application.Current一定会被初始化为你自定义的App类实例,正常开发场景下不会出现类型转换失败的问题,可以放心使用。
内容的提问来源于stack exchange,提问作者Soerx
相关产品推荐
相关产品推荐

