CollectionView GridItemsLayout 更改嵌套项目(按钮)的背景颜色
CollectionView GridItemsLayout Change BackgroundColor of nested Item (Button)
我有一个关于 CollectionView
和 GridItemsLayout
的问题。在我的应用程序中,我有一个 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>
我有一个关于 CollectionView
和 GridItemsLayout
的问题。在我的应用程序中,我有一个 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>