2015-08-19 2 views
1

У меня есть собственное (Xamarin.Forms) listview. Мой контекст данных имеют 3 свойство, как:Настроить ячейки/ListView на Xamarin.Forms через пользовательский рендер

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

Где Имя это свойство для TextLabel, ImageName ImageSource для ImageControl и isAvailable своего рода условие для cell (true - cell активен, другой мудрый Сотовый имеет другую непрозрачность/фон и не является clickable, также появится изображение (в правом углу), которое покажет изображение "заблокировано"!).

Мой ListView в текущий момент:

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

  • Отключить ячейки (аналогично свойству isEabled) с другой непрозрачностью/фон ячейки (и ее contr ols label/image etc): enter image description here

Как я могу это достичь?
Любая помощь будет оценена, спасибо!
PS Извините за мой eng. навыки!

ответ

0

Думаю, вам придется написать собственный рендерер для этого, к сожалению. Чтобы установить линию разделителя на всю ширину экрана, вам нужно будет установить вставку seperator равным нулю, как показано ниже.

[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; 
     } 
    } 
} 

Извинение, если какое-либо из выше синтаксиса неправильно, я пишу из памяти, но она должна установить Вас на правильном пути.

+0

Это, очевидно, только для версии iOS. – Mike

+0

К сожалению, мне не помог этот трюк. Этот фрагмент просто скрывал разделитель. – XTL