我在首页有一个CollectionView,其中CollectionView元素由一个作为容器的Frame和其他元素组成(代码见下),我想实现在collectionView中选中Frame时改变Frame的颜色**。但是VisualStateManager“不起作用”,这种方法如何在选中时添加Frame animation?
我的ContentPage.资源代码:
<ContentPage.Resources>
<Style TargetType="Frame">
<Setter Property="VisualStateManager.VisualStateGroups">
<VisualStateGroupList>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="Selected">
<VisualState.Setters>
<Setter Property="BackgroundColor" Value="Red" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateGroupList>
</Setter>
</Style>
</ContentPage.Resources>
我的收藏查看代码:
<CollectionView.ItemTemplate>
<DataTemplate>
<Frame Margin="10, 10, 10, 0"
HeightRequest="100"
MinimumHeightRequest="95"
Padding="13"
CornerRadius="20"
BackgroundColor="DodgerBlue"
BorderColor="Transparent">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Label
Text="{Binding Title}"
FontSize="19"
TextColor="White"
FontAttributes="Bold"/>
<Label
Margin="0, 2, 0, 0"
Grid.Row="1"
Text="{Binding Description}"
FontSize="16"
TextColor="White"/>
<Label
Margin="0, 10, 0, 0"
Grid.Row="2"
Text="{Binding CreationTime, Converter={converters:TimePrettifyerConverter}}"
FontSize="12"
TextColor="White"/>
</Grid>
</Frame>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
1条答案
按热度按时间dm7nw8vv1#
更新
我做了一个演示在MVVM的方式与一个新的按钮添加一个新的项目,每次我点击按钮。
这是我的MainPage.xaml文件(我在底部添加了一个按钮来添加新项):
不要忘记在MainPage.cs文件中设置BindingContext:
这是我的MainPageViewModel,我定义了一个ItemCollection,CollectionView绑定到它,我还定义了按钮的ClickCommand,每次点击按钮都会在CollectionView中添加一个新的item。
这是Item.cs,为了方便起见,我没有使用CreationTime的Converter。
下面是我捕获的gif:
======
这是因为您在DataTemplate中设置了Frame BackgroundColor。所以如果我们在参考资料中使用VisualState,最好不要在任何其他地方设置Property。为了解决这个问题,也许您可以设置一个正常状态(这次我们使用Border):
并使用Border而不是Frame:
希望对你有用。