Фон выберите элемент списка - PullRequest
0 голосов
/ 30 октября 2019

У меня есть page.xaml со списком. Цвет фона страницы белый, и когда я касаюсь элемента ListView, фон этого элемента серый. Как я могу изменить этот цвет (фонового элемента) кроссплатформенным способом?

Page.xaml

page.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace App1.Materie_Universitarie.Diritto_Commerciale
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class indicecommerciale : ContentPage
    {
        public indicecommerciale()
        {
            InitializeComponent();

            argomentilist.ItemsSource = new List<Argomenti>()
           {

                new Argomenti()
                {
                    Capitolo = "La società di persone", Descrizione = ""
                },

                new Argomenti()
                {
                    Capitolo = "Le società di capitali", Descrizione = ""
                },

                new Argomenti()
                {
                    Capitolo = "I gruppi di società", Descrizione = ""
                }
            };
        }

        public class Argomenti: INotifyPropertyChanged
        {
            public string Capitolo
            {
                get;
                set;
            }

            public string Descrizione
            {
                get;
                set;
            }

            public event PropertyChangedEventHandler PropertyChanged;

            private Color _backgroundColor;

            public Color BackgroundColor
            {
                get { return _backgroundColor; }
                set
                {
                    _backgroundColor = value;

                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("BackgroundColor"));
                    }
                }
            }

            public void SetColors(bool isSelected)
            {
                if (isSelected)
                {
                    BackgroundColor = Color.FromRgb(0.20, 0.20, 1.0);
                }
                else
                {
                    BackgroundColor = Color.FromRgb(0.95, 0.95, 0.95);
                }
            }

        }




        private void argomentilist_ItemTapped(object sender, ItemTappedEventArgs e)
        {
            var nme = (Argomenti)e.Item;

            switch (nme.Capitolo
                )
            {
                case "Reati contro la persona":
                    Navigation.PushAsync(new local());
                    break;

                case "Reati contro la bellezza di Bibione":
                    Navigation.PushAsync(new DirittoPenale1());
                    break;
            }

        }
    }


}

IИзменится с вашими намеками. Большое спасибо за то время, которое вы потеряли для меня

1 Ответ

0 голосов
/ 30 октября 2019

Вы можете достичь этого следующим образом. Кросс-платформенным способом. enter image description here

Добавьте эти свойства в вашу модель.

    public class Argomenti : INotifyPropertyChanged
{
    public string Capitolo
    {
        get;
        set;
    }

    public string Descrizione
    {
        get;
        set;
    }
    public event PropertyChangedEventHandler PropertyChanged;

    private Color _backgroundColor;

    public Color BackgroundColor
    {
        get { return _backgroundColor; }
        set
        {
            _backgroundColor = value;

            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("BackgroundColor"));
            }
        }
    }

    public void SetColors(bool isSelected)
    {
        if (isSelected)
        {
            BackgroundColor = Color.FromRgb(0.20, 0.20, 1.0);
        }
        else
        {
            BackgroundColor = Color.FromRgb(0.95, 0.95, 0.95);
        }
    }
}

argomentilist_ItemTapped метод.

   private void argomentilist_ItemTapped(object sender, ItemTappedEventArgs e)
    {
        var selectedItem = e.Item as Argomenti;

        selectedItem.SetColors(true);
    }

Код макета.

   <StackLayout>
    <!-- Place new controls here -->
    <StackLayout Margin="10,10,0,0">
        <Label TextColor="Black" Text="Selezionare l'argomento" FontAttributes="Italic"></Label>
        <ListView ItemTapped="argomentilist_ItemTapped" x:Name="argomentilist">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell >
                        <StackLayout Orientation="Vertical" BackgroundColor="{Binding BackgroundColor}" >
                            <Label Text="{Binding Capitolo}" Font="18" TextColor="Black"></Label>
                            <Label Text="{Binding Descrizione}" Font="14" TextColor="Gray"></Label>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>
</StackLayout>

======= Обновление ============== Пожалуйста, измените Argomenti как следующий код.

открытый класс Argomenti: INotifyPropertyChanged {

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    public string Capitolo
    {
        get;
        set;
    }

    public string Descrizione
    {
        get;
        set;
    }


    Color _backgroundColor;

    public Color BackgroundColor
    {
        get { return _backgroundColor; }
        set
        {
            _backgroundColor = value;


            OnPropertyChanged("BackgroundColor");

        }
    }

    public void SetColors(bool isSelected)
    {
        if (isSelected)
        {
            BackgroundColor = Color.FromRgb(0.20, 0.20, 1.0);
        }
        else
        {
            BackgroundColor = Color.FromRgb(0.95, 0.95, 0.95);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...