Xamarin Forms中CollectionView选中项时切换编辑/删除按钮可见性
实现CollectionView选中项时显示/隐藏编辑、删除按钮
修改思路
在现有的VisualState中,分别给Normal(未选中)和Selected(选中)状态添加按钮可见性的设置:未选中时隐藏按钮,选中时显示按钮。
前提准备
确保Frame内部的编辑、删除按钮已设置x:Name属性,分别为BtnEdit和BtnDelete。
修改后的样式代码
<Style TargetType="Frame"> <Setter Property="VisualStateManager.VisualStateGroups"> <VisualStateGroupList> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Normal"> <VisualState.Setters> <!-- 未选中状态下隐藏按钮 --> <Setter TargetName="BtnEdit" Property="Visibility" Value="Hidden" /> <Setter TargetName="BtnDelete" Property="Visibility" Value="Hidden" /> </VisualState.Setters> </VisualState> <VisualState x:Name="Selected"> <VisualState.Setters> <Setter Property="BackgroundColor" Value="{DynamicResource MySelectedColor}" /> <!-- 选中状态下显示按钮 --> <Setter TargetName="BtnEdit" Property="Visibility" Value="Visible" /> <Setter TargetName="BtnDelete" Property="Visibility" Value="Visible" /> </VisualState.Setters> </VisualState> </VisualStateGroup> </VisualStateGroupList> </Setter> </Style>
替代方案(直接在ItemTemplate中定义)
如果按钮是在CollectionView的ItemTemplate布局内,也可以直接把VisualStateGroups写在根布局上,这样更直观:
<CollectionView.ItemTemplate> <DataTemplate> <Frame> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Normal"> <VisualState.Setters> <Setter TargetName="BtnEdit" Property="Visibility" Value="Hidden" /> <Setter TargetName="BtnDelete" Property="Visibility" Value="Hidden" /> </VisualState.Setters> </VisualState> <VisualState x:Name="Selected"> <VisualState.Setters> <Setter Property="BackgroundColor" Value="{DynamicResource MySelectedColor}" /> <Setter TargetName="BtnEdit" Property="Visibility" Value="Visible" /> <Setter TargetName="BtnDelete" Property="Visibility" Value="Visible" /> </VisualState.Setters> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> <!-- 你的Item布局 --> <StackLayout> <Label Text="{Binding ItemContent}" /> <Button x:Name="BtnEdit" Text="编辑" /> <Button x:Name="BtnDelete" Text="删除" /> </StackLayout> </Frame> </DataTemplate> </CollectionView.ItemTemplate>
内容的提问来源于stack exchange,提问作者developer9969
相关产品推荐
相关产品推荐

