2017-07-12 100 views
0

我需要更改Xamarin.Forms應用程序中的列表視圖的選定項目顏色。 所以我創建了一個自定義渲染...Xamarin.Forms iOS listview選定的項目顏色

PCL C#:

public class DarkViewCell : ViewCell {} 

PCL XAML:

<ListView> 
    <ListView.ItemTemplate> 
    <DataTemplate> 
     <local:DarkViewCell> 
     <ViewCell.View> 
      ... Stuff ... 
     </ViewCell.View> 
     </local:DarkViewCell>    
    </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

的iOS

public class DarkViewCellRenderer : ViewCellRenderer 
{ 
    private UIView bgView; 

    public override UITableViewCell GetCell(Cell item, UITableViewCell reusableCell, UITableView tv) 
    { 
     var cell = base.GetCell(item, reusableCell, tv); 

     cell.BackgroundColor = UIColor.Black; 
     cell.TextLabel.TextColor = UIColor.White; 

     if (bgView == null) 
     { 
      bgView = new UIView(cell.SelectedBackgroundView.Bounds); 
      bgView.Layer.BackgroundColor = UIColor.FromRGB(48,48,48).CGColor; 
      bgView.Layer.BorderColor = UIColor.FromRGB(48, 48, 48).CGColor; 
      bgView.Layer.BorderWidth = 2.0f; 
     } 

     cell.SelectedBackgroundView = bgView; 

     return cell; 
    } 
} 

但不工作。我也試圖改變SelectionStyle但沒有...

編輯

在一個新項目,它的工作原理。和代碼是一樣的

回答

1

我不是100%肯定,但我刪除

<x:Arguments> 
    <ListViewCachingStrategy>RecycleElement</ListViewCachingStrategy> 
</x:Arguments> 

,並開始工作。

0

嘗試設置:

public override UITableViewCell GetCell(Cell item, UITableView tv) 
{ 
    var cell = base.GetCell(item, tv); 
    cell.SelectedBackgroundView = new UIView() { BackgroundColor = UIColor.Black }; 
    return cell; 
} 

更新: 我只是用你的代碼在一個虛擬的項目和它的作品,因爲它應該。您是否添加了程序集屬性來註冊自定義渲染器?

[assembly: ExportRenderer(typeof(DarkViewCell), typeof(DarkViewCellRenderer))] 
namespace MyProject.iOS 
{ 
    public class DarkViewCellRenderer : ViewCellRenderer 
    { 
    } 
} 
+0

這是我嘗試的第一件事 –

+0

自定義渲染器中的其他任何東西是工作還是根本不工作?我只是從我自己的一個項目中複製了一段代碼,它完全按照需要工作。 –

+0

更新了我的答案。 –

0

我最近也有類似的問題,我發現設置單元格的背景色是使用細胞ContentView

嘗試使用在你的GetCell方法如下最好的辦法

cell.ContentView.BackgroundColor = UIColor.Black; 
0

按照下面的代碼它的工作對我來說

public override UITableViewCell GetCell(Cell item, UITableView tv) 
    { 
    var cell = base.GetCell(item, tv); 

    cell.SelectedBackgroundView = new UIView { 
    BackgroundColor = UIColor.DarkGray, 
    }; 
    return cell; 
} 

下面的鏈接是對你有用

Xamarin.Forms ListView: Set the highlight color of a tapped item

相關問題