通过自定义渲染自定义Xamarin.Forms上的Cells / ListView

时间:2015-08-19 21:23:35

标签: c# xamarin.ios xamarin.android xamarin.forms

我有一个原生(Xamarin.Forms)列表视图。我的数据上下文有3个属性,如:

public class MyDataContext :
{
  public string Name {get;set;}
  public string ImageName {get;set;}
  public bool isAvailable {get;set;}
}  

其中 名称 textLabel 的属性, ImageName ImageControl的imagesource和 isAvailable 某种细胞条件(真实 - 细胞是活跃的,其他明智的细胞有另一种不透明度/背景而不是可点击,也会出现一个图像(右上角),显示图像“ 已锁定 ”!)。

我目前的列表视图:

 public class MyListView: ListView
        {
            public MyListView()
            {
                ItemTemplate = new DataTemplate(()=>
                {
                    BackgroundColor = Color.FromHex("#f2f0e9");
                        var _Label = new Label() { FontSize = 13, TextColor = Color.FromHex("#979797")};
                    _Label.SetBinding(Label.TextProperty,"Name");

                    RowHeight = 69;

                     var _Img = new Image(){ WidthRequest = 35, HeightRequest = 42};
                    _Img.SetBinding(Image.SourceProperty,"ImageName");

                        return new ViewCell 
                        {
                            View = new StackLayout
                                {
                                    Orientation = StackOrientation.Horizontal,
                                    Padding = 10,
                                    Children = 
                                        {
                                            _Img,
                                            new StackLayout
                                            {
                                                Padding = 10,
                                                VerticalOptions = LayoutOptions.Center,
                                                Spacing = 0,
                                                Children = 
                                                    {
                                                       _Label,
                                                    }
                                                }
                                        }
                                    }
                        };

                });
            }
        }
    }  

出于某种原因,我需要自定义(两个平台iOs / Android):

  • 细胞分隔(需要实现一些自定义颜色和大小,如图片所示)enter image description here

  • 单元格禁用(类似于属性isEnabled)与单元格的另一个不透明度/背景(以及她的控件标签/图像等):enter image description here

我如何实现这一点?
任何帮助将不胜感激,谢谢! PS对不起我的工程师。技能!

1 个答案:

答案 0 :(得分:0)

我认为你不得不为此编写一个自定义渲染器。为了将分隔线设置为屏幕的整个宽度,您需要将分隔符插入设置为零,如下所示。

[assembly: ExportRenderer(typeof(ListView), typeof(MyListViewRenderer))]
namespace myApp.iOS.Custom_Renderers
{
    public class MyListViewRenderer : ListViewRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<ListView> e)
        {
            base.OnElementChanged(e);
            var table = (UITableView)this.Control;
            table.SeperatorInset = UIEdgeInsets.Zero;
        }
    }
}

如果上面的任何一种语法不正确,我会在内存中写道,但它应该让你在正确的路径上停下来。