Windows 10 UWP开发:如何去掉ListView默认的选中效果

原文:Windows 10 UWP开发:如何去掉ListView默认的选中效果

开发UWP的时候,很多人会碰到一个问题,就是ListView在被数据绑定之后经常有个默认选中的效果,就像这样:

而且它不仅会选中,还会触发一次SelectionChanged事件,当然,我们要让ListView可点击,一种流行的做法确实是用SelectionChanged事件,就像这样:

private void StationsList_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var station = StationsList.SelectedItem as Station;
    if (null != station)
    {
        SelectedStationChanged?.Invoke(this, station);
    }

    StationsList.SelectedItem = null;
}

但是因为数据绑定之后会被默认选中一项,所以这个事件被直接触发了,用户就会直接进入Item的子页面,ListView会一闪而过,为此我还写过workround:

private void StationSearchResultListControl_OnSelectedStationChanged(object sender, Station station)
{
    if (selectedAllStationListCount > 0)
    {
        if (null != station)
        {
            Frame.Navigate(typeof(StationDetail), station);
        }
    }

    selectedAllStationListCount++;
}

// Work around, listview seems got default selected value.
private int selectedAllStationListCount;

结果今天发现其实ListView的默认选中效果是可以去掉的,只要把SelectionMode设置为None:

SelectionMode="None"

现在就不会有默认选中项了:

然后把点击的事件从SelectionChanged换成ItemClick,而且一定记得要把IsItemClickEnabled打开:

<ListView x:Name="StationsList"
          ItemsSource="{Binding Source={StaticResource GroupedStations}}"
          Margin="-10,0,0,0"
          SelectionMode="None"
          HorizontalContentAlignment="Stretch"
          ItemClick="StationsList_OnItemClick"
          IsItemClickEnabled="True">

这样后台代码就可以用e.ClickedItem直接获得当前被点击的对象:

private void StationsList_OnItemClick(object sender, ItemClickEventArgs e)
{
    var station = e.ClickedItem as Station;
    if (null != station)
    {
        SelectedStationChanged?.Invoke(this, station);
    }

    StationsList.SelectedItem = null;
}

并且那个恶心的workround也能去掉了,代码更加有逼格了!

时间: 2024-12-22 01:16:39

Windows 10 UWP开发:如何去掉ListView默认的选中效果的相关文章

【Windows 10 应用开发】细说文本资源文件(resw)

原文:[Windows 10 应用开发]细说文本资源文件(resw) 最近,小戏骨版<红楼梦>很是火热,老周一口气看完了9集,一直看到 Surface 的风扇呼呼响.林黛玉和薛宝钗这两个角色都演得不怎么样,倒是演史湘云的娃娃演得不错,老周甚是喜欢. 于是,昨晚就不写代码了,让机器也休息一下.有人会问,看视频能看到发热?是的,一来,南方的天气,虽说秋分已过,但仍然暑气不消:二来嘛,老周是在网页上看的,Flash 那个播放组件,你懂的,特特的耗性能. 好了,F话就不扯太多,今天咱们聊聊 UWP 开

Win 10 UWP开发系列:设置AppBarButton的图标

原文:Win 10 UWP开发系列:设置AppBarButton的图标 在WP8以前,页面最下面的四个小圆按钮是不支持绑定的,WP8.1 RT之后,系统按钮升级成了AppBarButton,并且支持绑定了.在Win10 UWP开发中,按钮的样式发生了变化,外面的圆圈没有了.不过个人还是更喜欢之前的圆按钮的样子^_^ 很喜欢Metro Studio这个程序,有数百个好看的按钮可以用,并且可以导出成png图片.但现在不建议采取png图片的方式了,主要是因为png在缩放后有可能会失真,最好使用字体.p

设置UWP程序自启动(Automate launching Windows 10 UWP apps)

原文:设置UWP程序自启动(Automate launching Windows 10 UWP apps) 在开发UWP程序的过程中,有时候需要设置程序的自启.本人实现的步骤如下: 1.在VS中激活Protocol (Package.appxmanifest --> Declarations --> Add Protocol),图示如下: 2.编译并发布项目(Build and Deploy) 发布之后Protocol被激活,在(控制面板 --> 程序 --> 默认程序 -->

张高兴的 Windows 10 IoT 开发笔记:使用 ADS1115 读取模拟信号

原文:张高兴的 Windows 10 IoT 开发笔记:使用 ADS1115 读取模拟信号 考虑到 Raspberry Pi 读取模拟信号是很烦人的事情,更何况是在没人玩的 Windows 10 IoT 下,所以准备正儿八经的写点东西.   需求:使用 Raspberry Pi 读取输出模拟信号的 MQ 系列气体传感器.(GitHub:https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/ADS1115) 由于 Raspberr

张高兴的 Windows 10 IoT 开发笔记:HC-SR04 超声波测距模块

原文:张高兴的 Windows 10 IoT 开发笔记:HC-SR04 超声波测距模块 HC-SR04 采用 IO 触发测距.下面介绍一下其在 Windows 10 IoT Core 环境下的用法. 项目运行在 Raspberry Pi 2/3 上,使用 C# 进行编码.   1. 准备 HC-SR04 ×1  Raspberry Pi 2/3 ×1 公母头杜邦线 ×4   2. 连线 Vcc - 5V Gnd - GND Trig - GPIO 17 - Pin 11 Echo - GPIO

张高兴的 Windows 10 IoT 开发笔记:BH1750FVI 光照度传感器

原文:张高兴的 Windows 10 IoT 开发笔记:BH1750FVI 光照度传感器 BH1750FVI 是一款 IIC 接口的数字型光强度传感器集成电路.下面介绍一下其在 Windows 10 IoT Core 环境下的用法. 项目运行在 Raspberry Pi 2/3 上,使用 C# 进行编码. 1. 准备 包含 BH1750FVI 的传感器,这里选择的是淘宝上最多的 GY-30:Raspberry Pi 2/3 一块,环境为 Windows 10 IoT Core:公母头杜邦线 4-

张高兴的 Windows 10 IoT 开发笔记:使用 MAX7219 驱动 8&amp;#215;8 点阵

原文:张高兴的 Windows 10 IoT 开发笔记:使用 MAX7219 驱动 8×8 点阵 GitHub:https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/MAX7219

张高兴的 Windows 10 IoT 开发笔记:使用 ULN2003A 控制步进电机

原文:张高兴的 Windows 10 IoT 开发笔记:使用 ULN2003A 控制步进电机 GitHub:https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/ULN2003A  

Windows 10 UWP程序标题栏设置

原文:Windows 10 UWP程序标题栏设置 在Windows 10程序中,以前只能用于全屏方式的Metro程序现在可以运行在窗口模式下了,并且改了个新名字,叫Windows 通用程序(Universal Windows app),简称UWP程序.新的UWP程序虽然大体上还是和以前的Metro程序差不多的,但还是引入了一点新东西的,本文这里就介绍一下它的标题栏设置的几个特性.  隐藏标题栏: 将应用界面扩展至 Titlebar 区域     CoreApplication.GetCurren