在Xamarin Forms项目中,我已经能够成功拦截ContentPage.Content
属性(这是一个带有getter和setter的公共属性)。我有一个类BaseContentPage
,它继承自ContentPage
,并覆盖Content
属性,如下所示:
public new View Content
{
set
{
// create a wrapper around the value of Content
// ... someWrapper = ...
// set Content to the wrapped content
base.Content = someWrapper;
}
}
我认为两个关键点是:使用new
关键字,并使用base.Content = ...
我试图用我的App.cs文件中的Application.MainPage
属性(继承自Application)做同样的事情,如下所示:
public new Page MainPage
{
get
{
return base.MainPage;
}
set
{
// do something before navigating to the new page
// ...
base.MainPage = value;
}
}
但我的应用程序有一些奇怪的行为 - 当我导航到我现有的一些页面时,它们显示为空白页面(只是一个白色屏幕)。如果我移除了吸气剂,并且只有一个定位器,它似乎工作正常。在getter中,我还尝试了return value
,但这给了我错误The name 'value' does not exist in the current context
。
这是用getter和setter拦截公共财产的正确方法吗?