Xamarin.Forms untappable ListView (удаляет эффект пульсации выбора)

У меня есть ListView с настраиваемым ViewCell, который отображает статьи. Однако, когда вы выбираете элемент, он показывает эффект пульсации / выбора материала.

Волновой эффект

Xaml:

<ListView HasUnevenRows="True" ItemsSource="{Binding NewsArticles}" IsPullToRefreshEnabled="True"> <ListView.ItemTemplate> <DataTemplate> <ViewCell> <StackLayout Padding="10"> <Label Text="{Binding Title}" HorizontalOptions="Center" FontAttributes="Bold" /> <Image Source="{Binding ImageUrl}" IsVisible="{Binding HasImage}" /> <Label Text="{Binding Content}"></Label> </StackLayout> </ViewCell> </DataTemplate> </ListView.ItemTemplate> </ListView> 

Как удалить эффект пульсации?

Обновить:

После некоторых исследований я нашел RepeaterView в библиотеке XLabs. Это работает, если вы оберните его в ScrollView, хотя он забирает много аккуратной механики ListView, такой как обновление. Он также не поддерживает изменения в ItemSource из внешнего потока. Все еще ищу другие решения, поскольку я знаю, что это возможно на родном Android.

Solutions Collecting From Web of "Xamarin.Forms untappable ListView (удаляет эффект пульсации выбора)"

Поэтому после долгого, долгого времени мы это выяснили, вы можете выполнить его с помощью специального средства визуализации. Вот как,

Сначала создайте файл с именем no_selector.xml и поместите его в папку Ресурсы / макеты (свойства упаковки должны быть установлены на AndroidResource).

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_window_focused="false" android:drawable="@android:color/transparent"/> </selector> 

После этого создайте собственный инструмент визуализации для компонента ListView,

 [assembly: ExportRenderer (typeof(ListView), typeof(NoRippleListViewRenderer))] namespace Your.Own.Namespace { public class NoRippleListViewRenderer : ListViewRenderer { protected override void OnElementChanged (ElementChangedEventArgs<ListView> e) { base.OnElementChanged (e); Control.SetSelector (Resource.Layout.no_selector); } } } 

Если файл no_selector не найден, перестройте свой проект!

Помните о том, что это устраняет пульсацию для всех списков ListView в вашем приложении. Если вы хотите, чтобы он нацелился на пару, вы можете изменить первый тип в атрибуте ExportRenderer (это требует от вас создания отдельного класса, который расширяет ListView).

https://gist.github.com/alagaros/d83787dbbf3de6ef0e0a344169d3c2fa

Я думаю, вы можете удалить его без специального рендеринга.

Вы можете установить BackgroundColor вашего StackPanel на серый или любой цвет фона вашего списка или страницы.

 <ListView HasUnevenRows="True" ItemsSource="{Binding NewsArticles}" IsPullToRefreshEnabled="True"> <ListView.ItemTemplate> <DataTemplate> <ViewCell> <StackLayout Padding="10" BackgroundColor="Gray"> <!-- ... --> </StackLayout> </ViewCell> </DataTemplate> </ListView.ItemTemplate> </ListView> 

Или вы можете использовать стили Android для изменения стилей просмотра списка:

Установить тему в AndroidManifest.xml

 <application android:label="$safeprojectname$" android:theme="@style/myTheme"></application> 

Создать тему в styles.xml

 <?xml version="1.0" encoding="utf-8" ?> <resources> <style name="myTheme" parent="@android:style/Theme.Material.Light"> <item name="android:listViewStyle">@style/ListViewStyle.Light</item> </style> <style name="ListViewStyle.Light" parent="@android:style/Widget.ListView"> <item name="android:listSelector">@android:color/transparent</item> </style> </resources>