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

如何禁用Xamarin.Forms ListView的UWP端悬停高亮效果?

禁用Xamarin.Forms UWP中ListView的鼠标悬停高亮效果

嘿,这个问题我太熟了!UWP自带的ListView项悬停高亮确实会跟自定义卡片的样式冲突,要全局禁用这个效果的话,用Xamarin.Forms的自定义渲染器就能搞定,下面是具体的实现步骤:

全局禁用所有ListView的悬停效果

直接在你的UWP项目里创建一个自定义渲染器,它会自动作用于应用内所有的ListView:

using Xamarin.Forms.Platform.UWP;
using Xamarin.Forms;
using YourAppNamespace.UWP; // 记得替换成你的UWP项目实际命名空间

[assembly: ExportRenderer(typeof(ListView), typeof(CustomListViewRenderer))]
namespace YourAppNamespace.UWP
{
    public class CustomListViewRenderer : ListViewRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<ListView> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                // 覆盖UWP默认的悬停背景为透明,直接禁用高亮
                Control.ItemContainerStyle = new Windows.UI.Xaml.Style(typeof(Windows.UI.Xaml.Controls.ListViewItem))
                {
                    Setters =
                    {
                        new Windows.UI.Xaml.Setter(Windows.UI.Xaml.Controls.ListViewItem.HoverBackgroundProperty, Windows.UI.Xaml.Media.Brushes.Transparent),
                        // 可选:如果不需要选中时的高亮,也一起禁用
                        new Windows.UI.Xaml.Setter(Windows.UI.Xaml.Controls.ListViewItem.SelectedBackgroundProperty, Windows.UI.Xaml.Media.Brushes.Transparent)
                    }
                };
            }
        }
    }
}

这段代码的核心是通过设置ListViewItem的HoverBackgroundProperty为透明,彻底覆盖UWP的默认悬停样式。如果你连选中状态的高亮也不需要,把SelectedBackgroundProperty也设为透明即可。

仅针对特定ListView禁用悬停效果

如果不想全局修改,只想给某几个ListView禁用悬停效果,可以先定义一个标记用的自定义ListView子类:

using Xamarin.Forms;

namespace YourAppNamespace
{
    public class NoHoverListView : ListView
    {
        // 空类,仅用于区分普通ListView
    }
}

然后把自定义渲染器的ExportRenderer属性改成针对这个子类:

[assembly: ExportRenderer(typeof(NoHoverListView), typeof(CustomListViewRenderer))]

之后在XAML里使用这个自定义控件代替普通ListView就行:

<local:NoHoverListView ItemsSource="{Binding YourItems}">
    <!-- 你的DataTemplate定义 -->
</local:NoHoverListView>

注意事项

  • 记得把代码里的命名空间替换成你自己项目的实际命名空间,不然会编译报错
  • 测试时要在UWP模拟器或真机上验证,有时候调试器里的样式可能不会实时更新
  • 透明背景不会影响你自定义DataTemplate里的卡片样式,只是去掉了UWP默认的悬停高亮层

内容的提问来源于stack exchange,提问作者neqopa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:07:41