如何创建多个相同类型的自定义渲染器?
How to create multiple custom renderer with same type?
我想创建一个 ContentPage 类型的页面渲染。我在 android 中创建了它并且它正在工作,但在 IOS 中有相同类型(ContentPage)的自定义页面渲染器。它可以删除,因为它来自 nuget 包并在不同的上下文中工作。
这是我的代码
[assembly: ExportRenderer(typeof(ContentPage), typeof(CustomPageRenderer))]
namespace AlwinInvoiceGenerator.IOS
{
using CoreGraphics;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
public class CustomPageRenderer : PageRenderer
{
public override void ViewWillAppear(bool animated)
{
base.ViewWillAppear(animated);
if (Element == null || !(Element is ContentPage basePage) || basePage.BindingContext == null ||
!(basePage.BindingContext is BaseViewModel baseViewModel))
{
return;
}
SetCustomBackButton(baseViewModel);
}
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
OverrideUserInterfaceStyle = UIUserInterfaceStyle.Light;
}
private void SetCustomBackButton(BaseViewModel baseViewModel)
{
var fakeButton = new UIButton {Frame = new CGRect(0, 0, 50, 40), BackgroundColor = UIColor.Clear};
fakeButton.TouchDown += (sender, e) =>
{
baseViewModel.OnBackButtonClicked();
};
NavigationController?.NavigationBar.AddSubview(fakeButton);
}
}
好像没有注册,所以没有打电话。
我有另一个页面渲染器在 assembly
中注册
[assembly: ExportRenderer(typeof(ContentPage), typeof(IOSToolbarExtensions.iOS.Renderers.IOSToolbarExtensionsContentPageRenderer), Priority = short.MaxValue)]
如果我删除了这一行,那么上面的代码可以运行,但不能同时运行两个。
请帮助
同一类型似乎不适用于多个渲染器。
我已经创建了我的自定义渲染器的子类型并覆盖了需要的方法。效果不错
我想创建一个 ContentPage 类型的页面渲染。我在 android 中创建了它并且它正在工作,但在 IOS 中有相同类型(ContentPage)的自定义页面渲染器。它可以删除,因为它来自 nuget 包并在不同的上下文中工作。
这是我的代码
[assembly: ExportRenderer(typeof(ContentPage), typeof(CustomPageRenderer))]
namespace AlwinInvoiceGenerator.IOS
{
using CoreGraphics;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
public class CustomPageRenderer : PageRenderer
{
public override void ViewWillAppear(bool animated)
{
base.ViewWillAppear(animated);
if (Element == null || !(Element is ContentPage basePage) || basePage.BindingContext == null ||
!(basePage.BindingContext is BaseViewModel baseViewModel))
{
return;
}
SetCustomBackButton(baseViewModel);
}
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
OverrideUserInterfaceStyle = UIUserInterfaceStyle.Light;
}
private void SetCustomBackButton(BaseViewModel baseViewModel)
{
var fakeButton = new UIButton {Frame = new CGRect(0, 0, 50, 40), BackgroundColor = UIColor.Clear};
fakeButton.TouchDown += (sender, e) =>
{
baseViewModel.OnBackButtonClicked();
};
NavigationController?.NavigationBar.AddSubview(fakeButton);
}
}
好像没有注册,所以没有打电话。 我有另一个页面渲染器在 assembly
中注册[assembly: ExportRenderer(typeof(ContentPage), typeof(IOSToolbarExtensions.iOS.Renderers.IOSToolbarExtensionsContentPageRenderer), Priority = short.MaxValue)]
如果我删除了这一行,那么上面的代码可以运行,但不能同时运行两个。 请帮助
同一类型似乎不适用于多个渲染器。 我已经创建了我的自定义渲染器的子类型并覆盖了需要的方法。效果不错