Xamarin.Forms "styles. xml" ни на что не влияет - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть этот просмотр списка в моем приложении xamarin.forms:

            MenuItems = new List<ListViewDetail>(new[]
            {
                new ListViewDetail { Id = 0, Title = "Mein Profil" },
                new ListViewDetail { Id = 1, Title = "Meine Anzeigen" },
                new ListViewDetail { Id = 2, Title = "Merkliste" },
                new ListViewDetail { Id = 3, Title = "Website" },
                new ListViewDetail { Id = 4, Title = "Kontakt" },
                new ListViewDetail { Id = 5, Title = "Hilfe" },
                new ListViewDetail { Id = 6, Title = "Einstellungen" },
                new ListViewDetail { Id = 7, Title = "Missbrauch melden" },
                new ListViewDetail { Id = 8, Title = "Log Out" },

            });

К сожалению, выбранный цвет фона элементов - это неприятный оранжевый (на iOS это серый, что хорошо, но на Android это оранжевый).

Решение должно состоять в том, чтобы просто изменить стили в стилях. xml:

  <color name="ListViewSelected">#96BCE3</color>
  <color name="ListViewHighlighted">#E39696</color>

Но это ни на что не влияет. Я делаю это неправильно или мне нужно установить что-то еще, чтобы адресовать стили?

Спасибо:)

1 Ответ

0 голосов
/ 28 апреля 2020

Для реализации этой функции требуется два шага.

  1. Укажите ViewCell в качестве DataTemplate для ListView.

    <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <StackLayout>
                        <Label Text="{Binding . }"/>
                    </StackLayout>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    
  2. Создание собственного средства визуализации для ViewCell.

    [assembly: ExportRenderer(typeof(ViewCell), typeof(MyRenderer))]
    namespace App2.Droid
    {
        public class MyRenderer : ViewCellRenderer
        {
            private Android.Views.View _cellCore;
            private Drawable _unselectedBackground;
            private bool _selected;
            protected override Android.Views.View GetCellCore(Cell item, Android.Views.View convertView, ViewGroup parent, Context context)
            {
                _cellCore = base.GetCellCore(item, convertView, parent, context);
                _selected = false;
                _unselectedBackground = _cellCore.Background;
                return _cellCore;
            }
            protected override void OnCellPropertyChanged(object sender, PropertyChangedEventArgs args)
            {
                base.OnCellPropertyChanged(sender, args);
                if (args.PropertyName == "IsSelected")
                {
                    _selected = !_selected;
                    if (_selected)
                    {
                        var extendedViewCell = sender as ViewCell;
                        _cellCore.SetBackgroundColor(Android.Graphics.Color.Green);
                    }
                    else
                    {
                        _cellCore.SetBackground(_unselectedBackground);
                    }
                }
            }
        }
    }
    

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...