如何在Xamarin Forms中移除按钮点击时的高亮效果
Xamarin Forms 去除按钮点击高亮效果方案
通用跨平台实现(推荐)
通过重写按钮的视觉状态管理器配置,直接让点击状态和正常状态的样式完全一致即可消除高亮,不需要写平台特定代码:
<Button Text="提交"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Normal"> <VisualState.Setters> <Setter Property="BackgroundColor" Value="你的按钮正常背景色" /> <Setter Property="TextColor" Value="你的按钮正常文字色" /> </VisualState.Setters> </VisualState> <VisualState x:Name="Pressed"> <VisualState.Setters> <!-- 所有属性和Normal状态完全一致即可去掉点击高亮 --> <Setter Property="BackgroundColor" Value="你的按钮正常背景色" /> <Setter Property="TextColor" Value="你的按钮正常文字色" /> </VisualState.Setters> </VisualState> <!-- 禁用状态可按需保留或也设置为和Normal一致 --> <VisualState x:Name="Disabled"> <VisualState.Setters> <Setter Property="BackgroundColor" Value="#cccccc" /> <Setter Property="TextColor" Value="#666666" /> </VisualState.Setters> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> </Button>
如果多个按钮需要复用该效果,可以把配置写到全局样式中:
<Style TargetType="Button" x:Key="NoHighlightButtonStyle"> <Setter Property="VisualStateManager.VisualStateGroups"> <VisualStateGroupList> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Normal"> <VisualState.Setters> <Setter Property="BackgroundColor" Value="{StaticResource NormalBgColor}" /> <Setter Property="TextColor" Value="{StaticResource NormalTextColor}" /> </VisualState.Setters> </VisualState> <VisualState x:Name="Pressed"> <VisualState.Setters> <Setter Property="BackgroundColor" Value="{StaticResource NormalBgColor}" /> <Setter Property="TextColor" Value="{StaticResource NormalTextColor}" /> </VisualState.Setters> </VisualState> </VisualStateGroup> </VisualStateGroupList> </Setter> </Style>
使用时给按钮添加Style="{StaticResource NoHighlightButtonStyle}"即可。
平台特定优化
如果通用方案还有残留的平台原生高亮效果,可以配合平台特定属性彻底消除:
- Android端:默认按钮点击会带波纹效果,先在页面头部引入Android平台命名空间
给按钮添加属性关闭波纹:xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"<Button Style="{StaticResource NoHighlightButtonStyle}" android:Button.Foreground="@null" android:Button.StateListAnimator="@null" Text="提交" /> - iOS端:默认按钮点击会有半透明高亮遮罩,先在页面头部引入iOS平台命名空间
给按钮添加属性关闭高亮:xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core"<Button Style="{StaticResource NoHighlightButtonStyle}" ios:Button.AdjustsImageWhenHighlighted="false" Text="提交" />
全局生效方案
如果整个应用所有按钮都需要取消点击高亮,可以直接自定义一个继承自Button的控件,搭配对应的自定义渲染器,全局应用上述配置,不需要逐个按钮加样式。
内容的提问来源于stack exchange,提问作者Swathy
相关产品推荐
相关产品推荐

