xamarin 表单:如果共享库中的自定义控件,则不会执行自定义渲染器
xamarin form: Custom Renderer not get executed if Custom control in Shared library
我在一个解决方案中有两个项目:一个是库项目,另一个是应用程序的主项目。
库项目包含:共享库项目,android,和 iOS 类似于应用程序的主项目。
库项目将包含我可以重用的所有公共代码。
在共享库内的库项目中,我有一个扩展 StackLayout 的自定义控件,特定平台将有扩展自定义控件的渲染器。
如果我将所有代码放到应用程序的主项目中,渲染器确实会调用并能够执行我为控件编写的触摸事件。另一方面,如果将代码移至库项目,则控件不再具有触摸事件,因为 android 部分中编写的渲染器未被调用。
有谁知道如何调用渲染器?
你不能在共享代码中编写自定义渲染器,除非你使用像
这样的预处理器指令
#if __IOS__
//your ios specific code
#endif
#if __ANDROID__
//your android specific code
#endif
也许您扩展错误 class,如果您 post 您的代码我们可以提供更好的帮助;例如,我写了一个代码来改变 android 上的导航栏背景,就像这样
public class CustomNavigationRenderer : NavigationRenderer
{
protected override void OnLayout(bool changed, int l, int t, int r, int b)
{
base.OnLayout(changed, l, t, r, b);
//my own code
我必须扩展 Xamarin.Forms.Platform.Android.NavigationRenderer 并覆盖 OnLayout 方法。希望对你有帮助。
我在一个解决方案中有两个项目:一个是库项目,另一个是应用程序的主项目。
库项目包含:共享库项目,android,和 iOS 类似于应用程序的主项目。
库项目将包含我可以重用的所有公共代码。
在共享库内的库项目中,我有一个扩展 StackLayout 的自定义控件,特定平台将有扩展自定义控件的渲染器。
如果我将所有代码放到应用程序的主项目中,渲染器确实会调用并能够执行我为控件编写的触摸事件。另一方面,如果将代码移至库项目,则控件不再具有触摸事件,因为 android 部分中编写的渲染器未被调用。
有谁知道如何调用渲染器?
你不能在共享代码中编写自定义渲染器,除非你使用像
这样的预处理器指令#if __IOS__
//your ios specific code
#endif
#if __ANDROID__
//your android specific code
#endif
也许您扩展错误 class,如果您 post 您的代码我们可以提供更好的帮助;例如,我写了一个代码来改变 android 上的导航栏背景,就像这样
public class CustomNavigationRenderer : NavigationRenderer
{
protected override void OnLayout(bool changed, int l, int t, int r, int b)
{
base.OnLayout(changed, l, t, r, b);
//my own code
我必须扩展 Xamarin.Forms.Platform.Android.NavigationRenderer 并覆盖 OnLayout 方法。希望对你有帮助。