Xamarin listView 中的绑定颜色
Binding Color in Xamarin listView
我之前检查过一些答案,但没有任何帮助。我试图通过绑定 StackLayout BackgroundColor 来更改 ListView 中 ViewCell 的背景颜色。
现在看起来像这样
每个单元格都应该用不同的颜色填充,但它根本没有变化。背后的代码:
OrderDatapage.XAML:
<ContentPage.Resources>
<ResourceDictionary>
<local:BackgroundConverter x:Key="BackgroundConverter" />
</ResourceDictionary>
</ContentPage.Resources>
.
.
.
.
<StackLayout Orientation="Vertical">
<ListView x:Name="timetableList"
RowHeight="25"
SeparatorVisibility="Default"
Margin="0,0,0,10"
>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Horizontal"
VerticalOptions="FillAndExpand"
BackgroundColor="{Binding Paint, Converter={StaticResource BackgroundConverter}}">
<Label Text="{Binding Number}"
FontSize="Medium"
Margin="20,0,0,0"
TextColor="White"
BackgroundColor="Black"
/>
<Label Text="{Binding Title}"
FontSize="Default"
Margin="20,0,0,0"
TextColor="Black"
/>
<Label Text="{Binding Date}"
FontSize="Default"
HorizontalOptions="EndAndExpand"
Margin="0,0,40,0"
TextColor="Black"
/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
Converter.cs
class BackgroundConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return Color.FromHex(value.ToString());
}
}
OrderDataPage.cs
List<TimetableItem> timeTableList { get; set; }
public OrderDataPage()
{
InitializeComponent();
timeTableList = new List<TimetableItem>();
var timetable1 = new TimetableItem() { Number = "1", Title = "Test1", Date = "20-12-2020", Paint = "#63FF20" };
var timetable2 = new TimetableItem() { Number = "2", Title = "Test2", Date = "20-12-2020", Paint = "#FFD933" };
var timetable3 = new TimetableItem() { Number = "3", Title = "Test3", Date = "20-12-2020", Paint = "#C0C0C0" };
timeTableList.Add(timetable1);
timeTableList.Add(timetable2);
timeTableList.Add(timetable3);
timetableList.ItemsSource = timeTableList;
}
我认为您应该尝试将 Label 的 BackGroundColor 设置为 "Transparent" 以查看 StackLayout 背景颜色,但我不确定它是否有效。否则,您可以将 Label 的 BackGroundColor 设置为特定颜色。
在您的 IValueConverter 中,您应该检查 "value" 是否不为 null
if(value != null && value is string && (string)value != "")
return Color.FromHex(value.ToString());
else
return Color.Red;
更新
我对 StackLayout 的 BackgroudColor 进行了一些设置
slView.SetBinding(StackLayout.BackgroundColorProperty, "BackgroundColor");
其中 BackgroundColor 是一个字符串
List.Add(new Model { Description = "D1", Cost = 10.0, Qty = 1, BackgroundColor = "#9ac16e"});
List.Add(new Model { Description = "D2", Cost = 20.0, Qty = 2, BackgroundColor = "#8d0000" });
List.Add(new Model { Description = "D3", Cost = 30.0, Qty = 3, BackgroundColor = "#3a6cf6"});
即使没有 IValueConverter 也能正常工作
唯一的问题是,当您 select 行
时,您会松开然后突出显示
你可以找到一个 repo HERE
我之前检查过一些答案,但没有任何帮助。我试图通过绑定 StackLayout BackgroundColor 来更改 ListView 中 ViewCell 的背景颜色。
现在看起来像这样
每个单元格都应该用不同的颜色填充,但它根本没有变化。背后的代码:
OrderDatapage.XAML:
<ContentPage.Resources>
<ResourceDictionary>
<local:BackgroundConverter x:Key="BackgroundConverter" />
</ResourceDictionary>
</ContentPage.Resources>
.
.
.
.
<StackLayout Orientation="Vertical">
<ListView x:Name="timetableList"
RowHeight="25"
SeparatorVisibility="Default"
Margin="0,0,0,10"
>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Horizontal"
VerticalOptions="FillAndExpand"
BackgroundColor="{Binding Paint, Converter={StaticResource BackgroundConverter}}">
<Label Text="{Binding Number}"
FontSize="Medium"
Margin="20,0,0,0"
TextColor="White"
BackgroundColor="Black"
/>
<Label Text="{Binding Title}"
FontSize="Default"
Margin="20,0,0,0"
TextColor="Black"
/>
<Label Text="{Binding Date}"
FontSize="Default"
HorizontalOptions="EndAndExpand"
Margin="0,0,40,0"
TextColor="Black"
/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
Converter.cs
class BackgroundConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return Color.FromHex(value.ToString());
}
}
OrderDataPage.cs
List<TimetableItem> timeTableList { get; set; }
public OrderDataPage()
{
InitializeComponent();
timeTableList = new List<TimetableItem>();
var timetable1 = new TimetableItem() { Number = "1", Title = "Test1", Date = "20-12-2020", Paint = "#63FF20" };
var timetable2 = new TimetableItem() { Number = "2", Title = "Test2", Date = "20-12-2020", Paint = "#FFD933" };
var timetable3 = new TimetableItem() { Number = "3", Title = "Test3", Date = "20-12-2020", Paint = "#C0C0C0" };
timeTableList.Add(timetable1);
timeTableList.Add(timetable2);
timeTableList.Add(timetable3);
timetableList.ItemsSource = timeTableList;
}
我认为您应该尝试将 Label 的 BackGroundColor 设置为 "Transparent" 以查看 StackLayout 背景颜色,但我不确定它是否有效。否则,您可以将 Label 的 BackGroundColor 设置为特定颜色。
在您的 IValueConverter 中,您应该检查 "value" 是否不为 null
if(value != null && value is string && (string)value != "")
return Color.FromHex(value.ToString());
else
return Color.Red;
更新
我对 StackLayout 的 BackgroudColor 进行了一些设置
slView.SetBinding(StackLayout.BackgroundColorProperty, "BackgroundColor");
其中 BackgroundColor 是一个字符串
List.Add(new Model { Description = "D1", Cost = 10.0, Qty = 1, BackgroundColor = "#9ac16e"});
List.Add(new Model { Description = "D2", Cost = 20.0, Qty = 2, BackgroundColor = "#8d0000" });
List.Add(new Model { Description = "D3", Cost = 30.0, Qty = 3, BackgroundColor = "#3a6cf6"});
即使没有 IValueConverter 也能正常工作
唯一的问题是,当您 select 行
时,您会松开然后突出显示你可以找到一个 repo HERE