我有这段代码:
public partial class PhrasesFrameRenderer : Frame
{
Random rand = new Random();
private int answeredPhraseCount;
private int correctAns;
public PhrasesFrameRenderer()
{
InitializeComponent();
App.PhrasesFrameRenderer = this;
public void abc()
{
....
};
和自定义渲染器
[assembly: ExportRenderer(typeof(PhrasesFrameRenderer), typeof(PhrasesFrameCustomRenderer))]
namespace Japanese.iOS
{
public class PhrasesFrameCustomRenderer : FrameRenderer
{
UISwipeGestureRecognizer leftSwipeGestureRecognizer;
UISwipeGestureRecognizer rightSwipeGestureRecognizer;
PhrasesFrameRenderer frame;
bool rightSwipeEnabled = false;
有人可以向我解释如何从自定义渲染器代码中调用Phrases FrameRenderer中的ABC函数。
答案 0 :(得分:8)
在您的CustomRenderer中,angular.module('frontProfilDeveloppementApp')
.controller('AboutCtrl', function ($scope, $http, $sce){
var url = $sce.trustAsResourceUrl('http://localhost:8000/index');
$http.get(url})
.then(function (data) {
$scope.result = data;
});
});
属性基本上是您在PCL Xamarin Forms类中声明的视图Element
您只需要将此属性强制转换为类,您就可以访问所有公共方法和属性。
PhrasesFrameRenderer
或
var frame = (PhrasesFrameRenderer)Element;
frame.abc();
这应该有用。
一个注释:我不会将自定义视图称为渲染器,因为这可能会与其实际渲染器产生混淆。您的自定义框架可以命名为var frame = Element as PhrasesFrameRenderer;
if(frame != null)
frame.abc();
答案 1 :(得分:1)
因此'ExportRenderer'标志基本上告诉本机项目,如果它试图显示该类型的控件,则在必要时覆盖本机代码中使用的任何内容(I.E.您的类'PhrasesFrameCustomRenderer'中的覆盖方法)。
这意味着您的自定义渲染器在技术上不是从您的自定义框架派生的,它来自一个特殊的xamarin表单类,在本例中是一个名为“FrameRenderer”的类。因此,它无法访问表单项目('PhrasesFrameRenderer')中派生控件中的任何方法。
因此,您的答案的解决方案完全取决于您要实现的目标。
如果您只是想在某个时间调用该方法,那么您可以考虑订阅messagingcenter,如果您想访问该方法可能创建的变量/数据,那么可以通过一般的静态字典来完成用于设置和获取对象。
编辑 MessagingCenter示例:
public partial class PhrasesFrameRenderer : Frame
{
Random rand = new Random();
private int answeredPhraseCount;
private int correctAns;
public PhrasesFrameRenderer()
{
InitializeComponent();
App.PhrasesFrameRenderer = this;
MessagingCenter.Subscribe<App>(App, "invokeABC", abc);
}
public void abc(App obj)
{
};
}
并且在您的自定义渲染器中,无论您想要调用该方法,都需要以下内容:
MessagingCenter.Send((App)Xamarin.Forms.Application.Current, "invokeABC");
这一切都假定您不需要在两个类之间传递任何数据。
编辑静态指针
仔细查看代码,在App类的变量中放置一个指向自定义框架的指针。理论上你可以打电话给
App.PhrasesFrameRenderer.abc();