我正在使用Xamarin.Forms,并且创建了一个CollectionView自定义渲染器控件,因为我需要在某些情况下禁用滚动,但是该控件似乎不会自动更改所选项目的背景颜色。如果我使用CollectionView,则可以为选定项着色,但在自定义控件中则不行。
我在特定于平台的资源文件中设置全局样式:
<style name="MainTheme" parent="MainTheme.Base">
<item name="colorAccent">@color/colorAccent</item>
<item name="android:colorPrimaryDark">#00FF00</item>
<item name="android:colorPressedHighlight">@color/ListViewSelected</item>
<item name="android:colorLongPressedHighlight">@color/ListViewHighlighted</item>
<item name="android:colorFocusedHighlight">@color/ListViewSelected</item>
<item name="android:colorActivatedHighlight">@color/ListViewSelected</item>
<item name="android:activatedBackgroundIndicator">@color/ListViewSelected</item>
<item name="android:datePickerDialogTheme">@style/CustomDatePickerDialog</item>
字符串
下面是自定义渲染器:
[assembly: ExportRenderer(typeof(CollectionViewExt), typeof(CollectionViewCustomRenderer))]
namespace Vendo.Android.Renderers
{
internal class CollectionViewCustomRenderer: CollectionViewRenderer
{
public CollectionViewCustomRenderer(Context context) : base(context)
{
}
public override bool OnInterceptTouchEvent(MotionEvent ev)
{
if (Element is CollectionViewExt collectionView && collectionView.IsScrollEnabled)
return base.OnInterceptTouchEvent(ev);
else
return false;
}
public override bool OnTouchEvent(MotionEvent ev)
{
if (Element is CollectionViewExt collectionView && collectionView.IsScrollEnabled)
return base.OnTouchEvent(ev);
else
return false;
}
}
}
型
按照xaml页面代码:
<controls:CollectionViewExt x:Name="cvArticoli"
VerticalScrollBarVisibility="Always"
VerticalOptions="FillAndExpand"
IsScrollEnabled="{Binding IsScrollEnabled}"
Style="{StaticResource CollExtStyle}"
ItemsSource="{Binding ListaArticoli}"
SelectedItem="{Binding ArticoloModelCorrente, Mode=TwoWay}"
IsVisible="{Binding VisualizzaArticoli}"
ClassId="{Binding CatalogoVisualizzato}"
ItemTemplate="{StaticResource ArticoliTemplateSelector}"
RemainingItemsThreshold="2"
RemainingItemsThresholdReachedCommand="{Binding LoadMoreArticoliCommand}">
<controls:CollectionViewExt.EmptyView>
<StackLayout>
<Label
Margin="0,10"
HorizontalOptions="Center"
Text="Nessun articolo in lista."
TextColor="Gray"/>
</StackLayout>
</controls:CollectionViewExt.EmptyView>
<controls:CollectionViewExt.ItemsLayout>
<MultiBinding>
<Binding Path="CatalogoVisualizzato"/>
<Binding Path="ColonneCatalogo"/>
<MultiBinding.Converter>
<converters:BoolToItemsLayoutConverter/>
</MultiBinding.Converter>
</MultiBinding>
</controls:CollectionViewExt.ItemsLayout>
</controls:CollectionViewExt>
型
以下是collectionView Visual State Manager的app.xaml:
<Style x:Key="CollExtStyle" TargetType="controls:CollectionViewExt">
<Setter Property="VisualStateManager.VisualStateGroups">
<VisualStateGroupList>
<VisualStateGroup Name="CommonStates">
<VisualState Name="Normal">
<VisualState.Setters>
<Setter Property="BackgroundColor" Value="White" />
</VisualState.Setters>
</VisualState>
<VisualState Name="Selected">
<VisualState.Setters>
<Setter Property="BackgroundColor" Value="{StaticResource Highlight}" />
</VisualState.Setters>
</VisualState>
<VisualState Name="Disabled">
<VisualState.Setters>
<Setter Property="BackgroundColor" Value="{StaticResource Disabled}"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateGroupList>
</Setter>
</Style>
型
1条答案
按热度按时间r3i60tvu1#
解决办法很简单。只需设置CollectionView的SelectionMode属性,如下所示:
字符串