c# - 列表视图的背景选择项
问题描述
我有一个带有列表视图的 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;
}
}
}
}
我会随着你的提示而改变。非常感谢你为我失去的时间
解决方案
在您的模型中添加此属性。
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);
}
}
}
推荐阅读
- android - 如何忽略触摸事件,让安卓系统处理?
- android - BottomAppBar 忽略“layout_gravity”,始终显示在顶部
- python - 允许来自我的 zappa 应用程序的“ObjectCreated”事件通知
- javascript - 如何重写此 JavaScript 行以便于阅读?(三元运算符)
- ios - 当尝试从统一构建一个 Xcode 项目到我的 iPhone 时,它给了我这个错误 Apple Mach-O Linker (Id) Error
- oracle - 是否可以创建触发器以将表的数据插入到 Oracle 中的另一个表中?
- php - PHP/HTML 中的语法错误 - 解析错误
- python - Python:多处理输出问题
- c++ - 为什么有时需要将 c++ 模板函数定义放在头文件中?
- mysql - mysql 在另一个流行值查询的结果中找到一个流行值