这里很奇怪。在Xamarin Forms(iOS)中,我为我的项目创建了一个自定义ViewCell来创建自定义ListView外观。在大多数情况下,它很有效。但是,我遇到了一个时髦的故障。如果用户点击一个单元格,背景颜色将按原样更改(请参阅下面的代码)。从那时起,我还可以以编程方式设置SelectedItem,新选择的单元格将显示自定义背景颜色。但是,当我第一次启动应用程序时,在用户有机会点击ListView中的项目之前,我会加载一些首选项并在我的UI启动例程中手动设置SelectedItem。 SelectedItem实际上确实发生了变化,但设置背景颜色的代码没有任何效果。我可以多次设置SelectedItem,而不会更改颜色。一旦用户物理点击ListView,颜色就会亮起,并且对SelectedItem的任何后续更改(无论是手动还是物理)都可以正常工作。好像用户需要通过UI直接与ListView进行交互以使背景颜色起作用。如果用户与触发事件的不同控件交互,然后设置ListView的SelectedItem,它也可以工作。 摘要:在用户通过UI进行交互以设置SelectedItem之前,它不起作用。从那以后,一切都很酷。在此之前,没有用于更改SelectedItem的程序性调用会更改背景颜色(尽管该属性上的手表实际上反映了它已被设置。)
很混乱......对不起!让我知道我需要澄清什么。相关代码是这样的:
XAML
<ListView x:Name="listSoundScapes" BackgroundColor="#101010" SeparatorColor="#202020" RowHeight="50" Margin="0" HorizontalOptions="FillAndExpand" ItemSelected="listSoundScapes_ItemSelected">
<ListView.ItemTemplate>
<DataTemplate>
<local:ExtendedViewCell SelectedBackgroundColor="#999999" Tapped="listSoundScapes_Tapped">
<ViewCell.View>
<StackLayout Orientation="Horizontal">
<StackLayout HorizontalOptions="StartAndExpand" VerticalOptions="FillAndExpand" Orientation="Vertical" Margin="8,8,8,8">
<Label Text="{Binding Name}"
TextColor="#f0f0f0"
FontSize="13"
/>
<Label Text="{Binding Description}"
TextColor="#a0a0a0"
FontSize="11"
/>
</StackLayout>
<StackLayout x:Name="ItemCommands" Orientation="Horizontal" VerticalOptions="Center" HorizontalOptions="End" Padding="8" IsVisible="false">
<Button Image="edit.png" Clicked="btnEditSoundScape_Clicked" VerticalOptions="Center" />
<Button Image="delete.png" Clicked="btnDeleteSoundScape_Clicked" VerticalOptions="Center" />
</StackLayout>
</StackLayout>
</ViewCell.View>
</local:ExtendedViewCell>
</DataTemplate>
</ListView.ItemTemplate>
C#
public class ExtendedViewCell : ViewCell
{
public static readonly BindableProperty SelectedBackgroundColorProperty =
BindableProperty.Create("SelectedBackgroundColor",
typeof(Color),
typeof(ExtendedViewCell),
Color.Default);
public Color SelectedBackgroundColor
{
get { return (Color)GetValue(SelectedBackgroundColorProperty); }
set { SetValue(SelectedBackgroundColorProperty, value); }
}
}
的iOS
[assembly: ExportRenderer(typeof(ExtendedViewCell), typeof(ExtendedViewCellRenderer))]
namespace RootTuner.iOS
{
public class ExtendedViewCellRenderer : ViewCellRenderer
{
public override UITableViewCell GetCell(Cell item, UITableViewCell reusableCell, UITableView tv)
{
var cell = base.GetCell(item, reusableCell, tv);
var view = item as ExtendedViewCell;
cell.SelectedBackgroundView = new UIView
{
BackgroundColor = view.SelectedBackgroundColor.ToUIColor(),
};
return cell;
}
}
}
要设置SelectedItem,我只需要做一个基本的,简单的MyListView.SelectedItem = itmVariableHere; - 没什么特别的。
任何导致探索的都会很棒。再次,让我知道我应该澄清什么来澄清问题。
谢谢!