0

我有一个关于 aCollectionView和 a的问题GridItemsLayout。在我的应用程序中,我有StackLayout一个水平的CollectionView(GridItemsLayout),其中包含一个绑定到某个类别的 Button。

每当单击/点击按钮时,它都会ListView根据类别过滤下面的(外科手术类型)。所有这些都工作正常,但是,我想通过更改类别/按钮来突出显示类别/按钮,BackgroundColor以查看当前用于过滤的类别。

<CollectionView HeightRequest="70"
                    x:Name="categoryCollection"
                    ItemsSource="{Binding Categories}"
                    Margin="20,0,20,0"
                    SelectionMode="Single">
        <CollectionView.ItemsLayout>
            <GridItemsLayout Orientation="Horizontal" Span="1" HorizontalItemSpacing="5"/>
        </CollectionView.ItemsLayout>
        <CollectionView.ItemTemplate>
            <DataTemplate>
                <Grid Padding="0,5,0,5">
                    <Button x:Name="categoryButton" Text="{Binding Name}" 
                            Command="{Binding Path=BindingContext.FilterCommand, Source={x:Reference Name=SurgeryListView}}"
                            CommandParameter="{Binding .}"
                            CornerRadius="15"
                            FontFamily="OpenSans" Margin="0,5,10,5"
                            Opacity="0.6" FontSize="16" TextTransform="None">
                    </Button>
                </Grid>
            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>

 <ListView x:Name="listView"
              ItemsSource="{Binding Surgeries}"
              RefreshCommand="{Binding LoadSurgeriesCommand}"
              IsRefreshing="{Binding IsRefreshing}"
              IsPullToRefreshEnabled="True"
              RowHeight="70"
              BackgroundColor="{StaticResource darkThemeBackground}"
              ItemTemplate="{StaticResource surgeryDataTemplateSelector}">

        <ListView.Behaviors>
            <behaviors:EventToCommandBehavior
                EventName="ItemTapped"
                Command="{Binding SurgerySelectedCommand}"
                EventArgsConverter="{StaticResource ItemTappedConverter}">
            </behaviors:EventToCommandBehavior>
        </ListView.Behaviors>
    </ListView>

我尝试使用VisualStates,但这不起作用,因为点击按钮实际上并没有改变SelectedItem(需要单击周围/父网格元素)。此外,更改VisualState仅应用于 Grid 的BackgroundColor,而不应用于实际按钮的 。

问题:如何通过更改背景颜色来突出显示当前类别/按钮?

4

1 回答 1

0

由于选择工作良好,仅保留 ui/xaml 部分,如果您查看有关VisualStateManager的文档,您可以添加以下样式:

<CollectionView.Resources>
                <Style TargetType="Grid">
                    <Setter Property="VisualStateManager.VisualStateGroups">
                        <VisualStateGroupList>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualState x:Name="Normal" />
                                <VisualState x:Name="Selected">
                                    <VisualState.Setters>
                                        <Setter Property="BackgroundColor"
                                        Value="LightSkyBlue" />
                                    </VisualState.Setters>
                                </VisualState>
                            </VisualStateGroup>
                        </VisualStateGroupList>
                    </Setter>
                </Style>
</CollectionView.Resources>
于 2021-02-07T12:52:44.030 回答