xaml - 如何更改 ListView ViewCell ContextActions 的 BG 颜色
问题描述
希望你做得很好,
我用三个上下文操作创建了 ListView,在这里我想为每个 MenuItem 设置不同的背景颜色,如下图 ViewCell:
<?xml version="1.0" encoding="UTF-8"?>
<ViewCell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="PureSale.Core.Views.OrdersListTemplate">
<Grid Padding="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackLayout Spacing="5">
<Label Text="{Binding Title}" FontAttributes="Bold" HorizontalOptions="StartAndExpand"/>
<Label Text="{Binding StartDate}" HorizontalOptions="StartAndExpand"/>
</StackLayout>
<Image Source="indicatorIconBlack.png" Grid.Column="1" HorizontalOptions="EndAndExpand" VerticalOptions="CenterAndExpand"/>
</Grid>
</ViewCell>
public partial class OrdersListTemplate : ViewCell {
public OrdersListTemplate(){
InitializeComponent();
var deleteAction = new MenuItem { Text = "Delete", StyleId = "labelRedStyle" };
deleteAction.SetBinding(MenuItem.CommandParameterProperty, new Binding("."));
deleteAction.Clicked += (sender, e) => {
};
var archiveAction = new MenuItem { Text = "Archive", IsDestructive = true};
archiveAction.SetBinding(MenuItem.CommandParameterProperty, new Binding("."));
archiveAction.Clicked += (sender, e) => {
};
var cancelAction = new MenuItem { Text = "Cancel" };
cancelAction.SetBinding(MenuItem.CommandParameterProperty, new Binding("."));
cancelAction.Clicked += (sender, e) => {
};
ContextActions.Add(cancelAction);
ContextActions.Add(archiveAction);
ContextActions.Add(deleteAction);
}
}
XAML
<ListView HasUnevenRows="true" ItemsSource="{Binding OrderItems}" ios:ListView.SeparatorStyle="FullWidth" SelectedItem="{Binding SelectedListItem}">
<ListView.ItemTemplate>
<DataTemplate>
<views:OrdersListTemplate/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
如何为菜单项设置 StyledId,
请建议我谢谢...提前
解决方案
您可以通过编写一个转换器来实现这一点,该转换器将获取类型并发送与该类型相关的颜色。
首先在您的对象中添加一个枚举
public enum ActionType
{
Delete = 0,
Archive = 1,
Cancel = 2
};
添加一个根据您的操作类型返回颜色的转换器
class FileIconConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
switch ((ActionType)value)
{
case ActionType.Delete:
return Color.Red;
case ActionType.Archive:
return Color.Yellow;
case ActionType.Canncel:
return Color.Gray;
}
}
return Color.Black;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
将此转换器条目添加到 APP.xaml
<Convert:ActionTypeConverter x:Key="ActionTypeConverter"></Convert:ActionTypeConverter>
然后你可以在你的 xaml 文件中添加这个转换器
<Label BackgroundColor="{Binding ActionType, Converter={StaticResource ActionTypeConverter}}"/>
它对我来说很完美,我希望这会奏效。
推荐阅读
- reactjs - 在 Draft-js NPM 中突出显示单词
- python - 没有 Numpy 的 Python 中的矩阵乘法
- sql - 相似查询的不同输出
- hadoop - 纱线容量调度程序中的内部队列抢占
- angular - 在angular7中将HTML页面转换为PDF
- android - 如何在同步 Gradle 时修复 android studio 中的“无法调用方法 buildTypes()”错误?
- c# - 在 ListView 中显示嵌套的 JSON 数据(Xamarin.Forms,C#)
- java - 在自动生成的实现中不使用按名称限定的 mapstruct 中使用的方法
- ngrx-store - 类型 Store 上不存在属性 overrideSelector
ngrx/store@8.2 - javascript - 在特定网页上加载特定版本的引导程序