Xamarin RenderFactory.GetRenderer()不工作
我正在使用Xamarin开发一个跨平台控件。我的目标是有一个可选项目的列表。我有一些可以正常工作的iOS代码:Xamarin RenderFactory.GetRenderer()不工作,xamarin,renderer,xamarin-forms,Xamarin,Renderer,Xamarin Forms,我正在使用Xamarin开发一个跨平台控件。我的目标是有一个可选项目的列表。我有一些可以正常工作的iOS代码: private UIView CreateViewWithTemplate(UIPickerView pickerView, nint row) { // create our content presenter DYMOContentPresenter presenter = new DY
private UIView CreateViewWithTemplate(UIPickerView pickerView, nint row)
{
// create our content presenter
DYMOContentPresenter presenter = new DYMOContentPresenter();
// set its data template to the one from our control
presenter.ItemTemplate = this._pickerControl.ItemTemplate;
// set the data to the correct item from the list
presenter.ObjectContent = this._pickerControl.Items.ElementAt((int)row);
// and use the xamarin forms renderer factory to get a renderer for the item
IVisualElementRenderer renderer = RendererFactory.GetRenderer(presenter);
// tell the renderer the size of the view and
renderer.SetElementSize(new Size(pickerView.Frame.Width, ROW_HEIGHT));
// then get the native view and return
return renderer.NativeView;
}
然而,我试图在Android中实现这一点的尝试不起作用:
private View CreateViewWithTemplate(int position, View convertView, ViewGroup parent)
{
// create content presenter
DYMOContentPresenter presenter = new DYMOContentPresenter();
// set its data template to the correct item from the list
presenter.ItemTemplate = this._pickerControl.ItemTemplate;
// set data to correct list item
presenter.ObjectContent = this._pickerControl.Items.ElementAt((int) position);
// use Xamarin forms renderer factory to get a renderer for the item
IVisualElementRenderer renderer = RendererFactory.GetRenderer(presenter);
presenter.Layout(new Xamarin.Forms.Rectangle(0, 0, parent.Width, ROW_HEIGHT));
renderer.UpdateLayout();
renderer.Tracker.UpdateLayout();
renderer.ViewGroup.LayoutParameters = new ViewGroup.LayoutParams(parent.Width, ROW_HEIGHT);
renderer.ViewGroup.Layout(0, 0, parent.Width, ROW_HEIGHT);
renderer.ViewGroup.BuildDrawingCache();
// get native view and return
return renderer.ViewGroup;
}
我可以看到单个列表视图行,但其中没有文本显示。在注释掉这段代码并用简单的TextView
替换后,我可以看到文本,因此我怀疑渲染器有问题。我也尝试过此代码的许多变体(指定LayoutParams
,尝试调整子项大小,等等)。似乎什么都不管用