首页 > 解决方案 > 列表视图的背景选择项

问题描述

我有一个带有列表视图的 page.xaml。页面的背景颜色为白色,当我点击 ListView 项目时,该项目的背景为灰色。如何以跨平台的方式更改此颜色(背景选定项目的)?

页面.xaml

页面.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;
            }

        }
    }


}

我会随着你的提示而改变。非常感谢你为我失去的时间

标签: c#xamlxamarinxamarin.forms

解决方案


您可以像以下方式一样以跨平台的方式实现它。 在此处输入图像描述

在您的模型中添加此属性。

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

推荐阅读