Xamarin ViewCellRenderer未始终设置背景颜色

时间:2018-04-16 17:44:41

标签: c# ios uitableview listview xamarin

这里很奇怪。在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; - 没什么特别的。

任何导致探索的都会很棒。再次,让我知道我应该澄清什么来澄清问题。

谢谢!

0 个答案:

没有答案