WPF 列表框通过单击空白区域删除选择

2023-11-26

我有一个wpflistbox使用包含矩形的自定义项目模板。 中的每一项listbox可以选择(一次只能选择一个)。 我想添加一种行为,当用户单击不是该项目的位置时(例如,listbox,这不是一个项目),所选项目将被取消选择。

有任何想法吗? 谢谢。

例如,使用一个简单的列表框: 项目 1 第2项

我正在寻找的行为是当用户单击像素 500(这是listbox但不在项目上),当前选定的项目将被取消选择。


简单的解决方案是将属性数据绑定到ListBox.SelectedItem属性并将其设置为null每当你想清除选择时:

<ListBox ItemsSource="{Binding YourItems}" SelectedItem="{Binding SelectedItem}" 
    SelectionMode="Single" />

然后在代码中,您可以执行以下操作来清除选择:

SelectedItem = null;

你什么时候会这样做?您可以将处理程序附加到PreviewMouseLeftButtonDown event of the Window,或 UI 中的任何其他控件。在处理程序方法中,您可以进行命中测试以查看用户单击的项目是什么:

HitTestResult hitTestResult = 
    VisualTreeHelper.HitTest(controlClickedOn, e.GetPosition(controlClickedOn));
Control controlUnderMouse = hitTestResult.VisualHit.GetParentOfType<Control>();

See the VisualTreeHelper.HitTest Method (Visual, Point)以获得有关这部分的更多帮助。

那么也许是这样的:

if (controlUnderMouse.GetType() != typeof(ListBoxItem)) SelectedItem = null;

当然,有很多方法可以做到这一点,您必须填写我留下的几个空白,但您应该明白这个想法。


编辑>>>

通用的GetParentOfType方法是自定义的扩展方法它是在一个名为的单独的类中定义的DependencyObjectExtensions:

public static class DependencyObjectExtensions
{
    public static T GetParentOfType<T>(this DependencyObject element) 
        where T : DependencyObject
    {
        Type type = typeof(T);
        if (element == null) return null;
        DependencyObject parent = VisualTreeHelper.GetParent(element);
        if (parent == null && ((FrameworkElement)element).Parent is DependencyObject) 
            parent = ((FrameworkElement)element).Parent;
        if (parent == null) return null;
        else if (parent.GetType() == type || parent.GetType().IsSubclassOf(type)) 
            return parent as T;
        return GetParentOfType<T>(parent);
    }

    ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 列表框通过单击空白区域删除选择 的相关文章

随机推荐

  • Nginx 从不同的服务器提供 php 文件

    我正在尝试配置 nginx 以从另一台服务器提供 PHP 服务 这些文件可以位于其他服务器上 sample 下的目录中 Fast CGI 正在另一台服务器的端口 9000 上运行 这是我尝试过的 目前不起作用 location php pr
  • Delphi应用程序在调试时出现“无调试信息”

    我们构建了一个使用包和组件的应用程序 当我们调试应用程序时 IDE 中的 事件日志 通常会显示我们的 BPL 正在加载 但没有调试信息 无调试信息 这是没有意义的 因为我们所有的包和 EXE 都是通过调试构建的 each project O
  • WPF 本身支持读取/写入 WMF/EMF 文件吗?

    Windows Presentation Foundation 可以在不使用 WinForms Interop 或 Win32 的情况下读取 写入 WMF EMF 文件吗 如果没有 原因是什么 在 MSDN 上快速搜索发现a thread包
  • 停用 Jetty 的默认 404 错误处理程序

    我想在 Spring 3 1 Web 应用程序中提供自定义 404 错误页面 但我无法停用 Jetty 8 的默认 404 错误页面 Jetty 8 开箱即用 提供默认的 404 错误页面 当访问 Jetty 托管的网站并提供不由任何 se
  • MVC 与 n 层架构

    我想知道 MVC 一种架构模式 和应用程序的 n 层架构之间到底有什么区别 我搜索过但找不到简单的解释 可能我对 MVC 概念有点天真 所以如果有人能解释其中的区别那就太好了 N 层架构通常由网络分隔各层 IE 表示层位于某些 Web 服务
  • 在 Python 中设置配置文件的最佳方法是什么

    我意识到这个问题之前被问过 在 Python 中使用设置文件的最佳实践是什么 但鉴于这是 7 年前提出的问题 我认为随着技术的发展 再次讨论是有效的 我有一个 python 项目 需要根据环境变量的值使用不同的配置 由于使用环境变量来选择配
  • 折叠字符串中的空格

    我有一个看起来像这样的字符串 stuff more stuff stuff gt DD 我想去掉所有标点符号 将所有内容设为大写并折叠所有空格 使其看起来像这样 STUFF MORE STUFF STUFF DD 这可以通过一个正则表达式实
  • 使用支持库 v7:21 和 Android 开发人员工具中的工具栏为现有项目添加滑动选项卡

    我已经阅读了此链接中的信息 将 Tab 与新工具栏结合使用 AppCompat v7 21 并对此进行了大量研究 但问题是 SlidingTabLayout 项目正在使用 Gradle 构建文件和结构 我想使用 eclipse 添加选项卡布
  • 如何在JPQL连接中有多个条件

    我想使用连接两个表JPQL SELECT FROM A LEFT JOIN B ON A ID B A ID AND B lng en 重要的部分是AND B lng en 这可能在JPQL JPA 2 0 不支持 ON 子句 但 JPA
  • 不同父母的 Z 指数

    我在 z 索引方面遇到了一些麻烦 这是我的简化布局 div div div div div div div div I need overlapper出现在面前child1但后面child2 我尝试摆弄 z 索引 但它不起作用 我想是因为堆
  • 不同的 DCOM / COM 安全设置意味着什么?

    我们的应用程序广泛使用 COM 和 DCOM 因此我们需要确保正确设置 COM 安全权限 我知道我可以在组件服务 MMC 管理单元下访问这些权限 并且可以在计算机的属性页下设置默认值 限制 在 DCOM Config 节点下 我可以深入了解
  • 如何重用计算列避免重复sql语句

    我有很多计算列 它们不断重复自己 一个在其他列里面 包括嵌套的 case 语句 我一直在寻找一种方法来做某事 有一个非常简化的版本 SELECT 1 2 AS A A 3 AS B B 7 AS C FROM MYTABLE 你可以尝试这样
  • 我们可以将 JsPlumb 流程图导出为 JSON 或 XML 吗?

    我创建了一个 JSPlumb 流程图 现在 我想将此流程图导出到其相应的 JSON 或 XML 脚本中以保存并执行各种操作 什么更兼容 他们中的任何一个都很好 请赐教我这一点 我开发的 JsPlumb 代码 在各个网站的帮助下 如下所示
  • Python hmac 和 C# hmac

    我们有一个 python 网络服务 它需要一个哈希作为参数 python中的hash就是这样生成的 hashed data hmac new ant bat hashlib sha1 print hashed data hexdigest
  • 多维数组 PHP-JSON

    如何在 PHP 中创建一个数组 使用 json encode 变成具有以下结构的东西 Array 1 gt Array id gt 1 data gt 45 2 gt Array id gt 3 data gt 54 尝试这样的事情 ini
  • 使用 R 中的facet_grid 单独突出显示数据

    我在 R 中使用facet grid 绘制 5 个不同组的 RT 数据 我想强调每组 5 到 95 之间的数据 在下面的代码中 我使用整个数据框的百分位数 而不是每组的百分位数 知道如何仍然使用facet grid并在图中突出显示每个组的唯
  • 在 Oracle 函数中获取上个月的最后一天

    我需要一个函数Oracle像这样 当我给参数一个简单的日期时 然后函数应该让我得到上个月的最后一天 例子 FunctionName 10 02 2011 Result should be 31 01 2011 FunctionName 21
  • 如何覆盖 RichTextBox 中的复制和粘贴

    如何重写 Richtextbox C 应用程序中的复制 粘贴功能 包括ctrl c ctrl v和右键复制 粘贴 它是 WPF RichtextBox 要覆盖命令功能 protected override bool ProcessCmdKe
  • .NET ConcurrentDictionary.ToArray() ArgumentException

    有时 当我调用 ConcurrentDictionary ToArray 时 会出现以下错误 错误如下 System ArgumentException 索引等于或大于数组的长度 或者字典中的元素数量大于从索引到目标数组末尾的可用空间 在
  • WPF 列表框通过单击空白区域删除选择

    我有一个wpflistbox使用包含矩形的自定义项目模板 中的每一项listbox可以选择 一次只能选择一个 我想添加一种行为 当用户单击不是该项目的位置时 例如 listbox 这不是一个项目 所选项目将被取消选择 有任何想法吗 谢谢 例