You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 00:49:58