Формы Xamarin: как изменить цвет счетчика активности списка

Как изменить цвет индикатора активности для Xamarin.Forms.ListView, особенно для iOS?

Я нашел несколько сообщения о проблеме, но пользовательские средства визуализации слишком продвинуты для меня на данный момент я еще не могу понять в них никакого смысла.

Используя вторую ссылку, я создал класс в проекте iOS с данным кодом и класс в проекте PCL, чтобы на него можно было ссылаться из моего представления XAML:

namespace spinnerTest
{
    public class ColoredRefreshListView : ListView
    {
    }
}

Код, который я нашел, для удобства:

public class ColoredRefreshListViewRenderer : ListViewRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<ListView> e)
    {
        base.OnElementChanged(e);
        var vc = ((UITableViewController)ViewController);

        if (vc?.RefreshControl != null)
            vc.RefreshControl.TintColor = UIColor.FromRGB(135, 200, 21);
    }
}

Хотя XAML успешно компилируется с помощью пользовательского элемента управления, цвет не меняется.

Любые подсказки?


person SouLSLayeR    schedule 07.07.2017    source источник


Ответы (1)


Я не знаю, нашли ли вы решение, но ваш подход работает только тогда, когда вы тянете для обновления (не при первой загрузке).

Отсутствует только атрибут пространства имен для рендерера:

[assembly: ExportRenderer(typeof(ListView), typeof(ColoredRefreshListViewRenderer))]
namespace Test.iOS.Renderers
{
    public class ColoredRefreshListViewRenderer : ListViewRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<ListView> e)
        {
           base.OnElementChanged(e);
           var vc = ((UITableViewController)ViewController);

           if (vc?.RefreshControl != null)
               vc.RefreshControl.TintColor = UIColor.FromRGB(135, 200, 21);
        }
    }
}

Примечание: если вы хотите применить свой рендерер по умолчанию для ListView, вы должны указать тип ListView в ExportRender(<type>). Вместо этого используйте свой определенный базовый тип (ColoredRefreshListView в вашем примере), но в этом случае вы должны явно объявить этот тип в XAML, а не только базовый тип ListView.

person Pier-Lionel Sgard    schedule 13.07.2018
comment
Вау, это взрыв из прошлого. IIRC, я в значительной степени сделал то, что вы описываете, и использовал его как настраиваемый элемент управления (не по умолчанию). Я также могу сильно ошибаться, но я думаю, что это было исправлено в более поздней версии Forms. - person SouLSLayeR; 09.09.2018