2016-12-04 83 views
3

当在Xamarin.forms中使用ListView时,在选择一个项目时,该项目仍然像一个相当丑陋的背景颜色。我可以禁用此功能吗? The blue colour is what i wish to take out.listview中selecteditem的背景颜色xamarin.forms

这里是我的代码:

<StackLayout> 
    <ListView x:Name="FoodList" HasUnevenRows="True" CachingStrategy="RecycleElement" ItemTapped="OnItemTapped"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
     <ViewCell> 
      <StackLayout Padding="0,15,0,0" > 
      <StackLayout Orientation="Horizontal" BackgroundColor="White" > 
      <Image Source="{Binding image_url}" Aspect="AspectFill" HeightRequest="200" WidthRequest="200"/> 
      <StackLayout Orientation="Vertical"> 
       <Label Text="{Binding food_name}" TextColor="Black" Style="{StaticResource MainLisTtext}" /> 
       <Label Text="{Binding price}" TextColor="Black" Style="{StaticResource SubLisTtext}" /> 
       <Label Text="{Binding food_description}" TextColor="Black" Style="{StaticResource SubLisTtext}" /> 
      </StackLayout> 
      </StackLayout> 
      </StackLayout> 
     </ViewCell>vc 
     </DataTemplate> 
    </ListView.ItemTemplate> 
    </ListView> 
</StackLayout> 

回答

8

这可以通过使用自定义渲染

iOS的自定义呈现

编辑iOS上SelectionStyle属性来完成。

下面的示例将UITableViewCellSelectionStyle设置为None

using System; 

using UIKit; 

using Xamarin.Forms; 
using Xamarin.Forms.Platform.iOS; 

using ListViewSample.iOS; 

[assembly: ExportRenderer(typeof(ViewCell), typeof(ViewCellItemSelectedCustomRenderer))] 
namespace ListViewSample.iOS 
{ 
    public class ViewCellItemSelectedCustomRenderer : ViewCellRenderer 
    { 
     public override UITableViewCell GetCell(Cell item, UITableViewCell reusableCell, UITableView tv) 
     { 
      var cell = base.GetCell(item, reusableCell, tv); 

      cell.SelectionStyle = UITableViewCellSelectionStyle.None; 

      return cell; 
     } 
    } 
} 

Android的自定义呈现

  1. 创建一个新的绘制,ViewCellBackground.xml并将其保存到Resources>drawable文件夹:

    <?xml version="1.0" encoding="UTF-8" ?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
        <item android:state_pressed="true" > 
         <shape android:shape="rectangle"> 
          <!--Change the selected color by modifying this hex value--> 
          <solid android:color="#FFFFFF" /> 
         </shape> 
        </item> 
        <item> 
         <shape android:shape="rectangle"> 
          <solid android:color="#FFFFFF" /> 
         </shape> 
        </item> 
    </selector> 
    
  2. 为ViewCell

    创建自定义呈现
    using System; 
    
    using Xamarin.Forms; 
    using Xamarin.Forms.Platform.Android; 
    
    using ListViewSample.Droid; 
    
    [assembly: ExportRenderer(typeof(ViewCell), typeof(ViewCellItemSelectedCustomRenderer))] 
    namespace ListViewSample.Droid 
    { 
        public class ViewCellItemSelectedCustomRenderer : ViewCellRenderer 
        { 
         protected override Android.Views.View GetCellCore(Cell item, Android.Views.View convertView, Android.Views.ViewGroup parent, Android.Content.Context context) 
         { 
          var cell = base.GetCellCore(item, convertView, parent, context); 
    
          cell.SetBackgroundResource(Resource.Drawable.ViewCellBackground); 
    
          return cell; 
         } 
        } 
    } 
    

编辑:删除不执行自定义渲染器


样品Xamarin.Forms的ListView应用

using System; 
using System.Collections.Generic; 

using Xamarin.Forms; 

namespace ListViewSample 
{ 
    public class CustomViewCell : ViewCell 
    { 
     public CustomViewCell() 
     { 
      View = new Label 
      { 
       Text = "Hello World" 
      }; 
     } 
    } 

    public class ListViewContentPage : ContentPage 
    { 
     public ListViewContentPage() 
     { 
      var itemSourceList = new List<CustomViewCell>(); 
      itemSourceList.Add(new CustomViewCell()); 
      itemSourceList.Add(new CustomViewCell()); 

      var listView = new ListView(); 
      listView.ItemTemplate = new DataTemplate(typeof(CustomViewCell)); 
      listView.ItemsSource = itemSourceList; 
      listView.SeparatorVisibility = SeparatorVisibility.None; 

      Content = listView; 
     } 
    } 

    public class App : Application 
    { 
     public App() 
     { 
      // The root page of your application 

      MainPage = new NavigationPage(new ListViewContentPage()); 
     } 
    } 
} 
+0

OnListViewTextCellTapped这是一个自定义的方法? –

+0

是的 - 对不起!我只是更新了我的答案,以包含OnListViewTextCellTapped方法。 –

+0

好的。使用listview时,我可以访问选定的项目,这是否适用于此? –