Xamarin.Forms 2.5.0 和上下文
Xamarin.Forms 2.5.0 and Context
今天我更新到 Xamarin.Forms 2.5.0 并看到我收到以下警告:
- 来自 Android 子项目:
Warning CS0618 'Forms.Context' is obsolete: 'Context is obsolete as of version 2.5. Please use a local context instead.'
如何获取本地上下文而不是 Forms.Context
?
- 来自自定义渲染器:
Warning CS0618 'ButtonRenderer.ButtonRenderer()' is obsolete: 'This constructor is obsolete as of version 2.5. Please use ButtonRenderer(Context) instead.'
在我的ButtonRenderer
中只有OnElementChanged()
方法,所以我应该在这里更改什么?只需添加一个 ButtonRenderer(Context)
构造函数?如果我在我的平台渲染器 class 中这样做,我仍然会收到警告。有人有例子吗? official documentation doesn't mention it and Google also doesn't bring some useful results, except the open source code of ButtonRenderer
。此更改还涉及许多其他渲染器 classes.
有没有人经历过其他的变化,比如刹车插件等等?
PS:我也没有发现,当 Device.Windows
被弃用时。现在我用 Device.UWP
替换了它。
使用Android.App.Application.Context
上有关于此主题的讨论
我对 SearchBarRenderer
也有同样的问题,我需要做的就是添加一个构造函数,如下所示:
public ShowSearchBarRenderer(Context context) : base(context)
{
}
希望这能回答您问题的第二部分。
这里有两个问题:
- 如何更新自定义呈现器以使用本地上下文?
- 现在
Xamarin.Forms.Forms.Context
已过时,我如何访问当前上下文?
如何更新自定义渲染器
将重载的构造函数添加到每个自定义渲染器
这是一个使用 ButtonRenderer
的例子
[assembly: ExportRenderer(typeof(CustomButton), typeof(CustomButtonRenderer))]
namespace MyApp.Droid
{
public class CustomButtonRenderer : ButtonRenderer
{
public CustomButtonRenderer(Context context) : base(context)
{
}
protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
//ToDo: Customize Button
}
}
}
如何访问当前上下文
安装Xamarin.Essentials NugGet Package。
现在,您可以在需要访问当前activity时调用Xamarin.Essentials.Platform.AppContext
。
下面是如何在 Xamarin.Forms 中打开应用程序设置的示例。
[assembly: Dependency(typeof(DeepLinks_Android))]
namespace MyApp.Droid
{
public class DeepLinks_Android : IDeepLinks
{
Context CurrentContext => Xamarin.Essentials.Platform.AppContext;
public Task OpenSettings()
{
var myAppSettingsIntent = new Intent(Settings.ActionApplicationDetailsSettings, Android.Net.Uri.Parse("package:" + CurrentContext.PackageName));
myAppSettingsIntent.AddCategory(Intent.CategoryDefault);
return Task.Run(() =>
{
try
{
CurrentContext.StartActivity(myAppSettingsIntent);
}
catch (Exception)
{
Toast.MakeText(CurrentContext.ApplicationContext, "Unable to open Settings", ToastLength.Short);
}
});
}
}
}
今天我更新到 Xamarin.Forms 2.5.0 并看到我收到以下警告:
- 来自 Android 子项目:
Warning CS0618 'Forms.Context' is obsolete: 'Context is obsolete as of version 2.5. Please use a local context instead.'
如何获取本地上下文而不是 Forms.Context
?
- 来自自定义渲染器:
Warning CS0618 'ButtonRenderer.ButtonRenderer()' is obsolete: 'This constructor is obsolete as of version 2.5. Please use ButtonRenderer(Context) instead.'
在我的ButtonRenderer
中只有OnElementChanged()
方法,所以我应该在这里更改什么?只需添加一个 ButtonRenderer(Context)
构造函数?如果我在我的平台渲染器 class 中这样做,我仍然会收到警告。有人有例子吗? official documentation doesn't mention it and Google also doesn't bring some useful results, except the open source code of ButtonRenderer
。此更改还涉及许多其他渲染器 classes.
有没有人经历过其他的变化,比如刹车插件等等?
PS:我也没有发现,当 Device.Windows
被弃用时。现在我用 Device.UWP
替换了它。
使用Android.App.Application.Context
我对 SearchBarRenderer
也有同样的问题,我需要做的就是添加一个构造函数,如下所示:
public ShowSearchBarRenderer(Context context) : base(context)
{
}
希望这能回答您问题的第二部分。
这里有两个问题:
- 如何更新自定义呈现器以使用本地上下文?
- 现在
Xamarin.Forms.Forms.Context
已过时,我如何访问当前上下文?
如何更新自定义渲染器
将重载的构造函数添加到每个自定义渲染器
这是一个使用 ButtonRenderer
[assembly: ExportRenderer(typeof(CustomButton), typeof(CustomButtonRenderer))]
namespace MyApp.Droid
{
public class CustomButtonRenderer : ButtonRenderer
{
public CustomButtonRenderer(Context context) : base(context)
{
}
protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
//ToDo: Customize Button
}
}
}
如何访问当前上下文
安装Xamarin.Essentials NugGet Package。
现在,您可以在需要访问当前activity时调用Xamarin.Essentials.Platform.AppContext
。
下面是如何在 Xamarin.Forms 中打开应用程序设置的示例。
[assembly: Dependency(typeof(DeepLinks_Android))]
namespace MyApp.Droid
{
public class DeepLinks_Android : IDeepLinks
{
Context CurrentContext => Xamarin.Essentials.Platform.AppContext;
public Task OpenSettings()
{
var myAppSettingsIntent = new Intent(Settings.ActionApplicationDetailsSettings, Android.Net.Uri.Parse("package:" + CurrentContext.PackageName));
myAppSettingsIntent.AddCategory(Intent.CategoryDefault);
return Task.Run(() =>
{
try
{
CurrentContext.StartActivity(myAppSettingsIntent);
}
catch (Exception)
{
Toast.MakeText(CurrentContext.ApplicationContext, "Unable to open Settings", ToastLength.Short);
}
});
}
}
}