CollectionView GridItemsLayout 更改嵌套项目(按钮)的背景颜色

CollectionView GridItemsLayout Change BackgroundColor of nested Item (Button)

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

只要按钮是 clicked/tapped,它就会根据类别过滤下面的 ListView(手术类型)。所有这些都工作正常,但是,我想通过更改 BackgroundColor 来突出显示 Category/Button 以查看当前用于过滤的类别。

<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 (需要单击 surrounding/parent 网格元素).此外,更改后的 VisualState 仅应用于网格的 BackgroundColor,而不是实际按钮的

问题:如何通过更改背景颜色来突出显示当前 Category/Button?

由于选择工作正常,仅保留 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>