gpt4 book ai didi

WPF ListView ScrollViewer 双击事件

转载 作者:行者123 更新时间:2023-12-04 16:09:35 25 4
gpt4 key购买 nike

执行以下操作将重现我的问题:

  • 新建 WPF 项目
  • 添加 ListView
  • 命名 ListView :x:Name="lvList"
  • 向 ListView 添加足够的 ListViewItems 以完全填充列表,以便在运行时出现垂直滚动条。
  • 将此代码放入 lvList.MouseDoubleClick 事件

  • Debug.Print("双击发生")
  • 运行应用程序
  • 双击滚动条的 LargeChange 区域(不是滚动“条”本身)
  • 注意立即窗口为 ListView 打印了双击发生的消息

  • 如何更改此行为,以便 MouseDoubleClick 仅在鼠标“悬停”在 ListViewItems 上时发生,而不是在连续单击 ScrollViewer 以在列表中向下/向上滚动时发生?

    最佳答案

    您无法更改行为,因为 MouseDoubleClick 处理程序附加到 ListView 控件,因此无论何时单击 ListView 都必须发生这种情况——任何地方。您可以做什么来检测 ListView 的哪个元素首先检测到双击,并从那里确定它是否是 ListViewItem。这是一个简单的例子(省略错误检查):

    private void lv_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
    DependencyObject src = (DependencyObject)(e.OriginalSource);
    while (!(src is Control))
    src = VisualTreeHelper.GetParent(src);
    Debug.WriteLine("*** Double clicked on a " + src.GetType().Name);
    }

    请注意使用 e.OriginalSource 查找双击的实际元素。这通常是像 Rectangle 或 TextBlock 这样非常低级的东西,因此我们使用 VisualTreeHelper 走到包含控件。在我的简单示例中,我假设我们点击的第一个 Control 将是 ListViewItem,如果您正在处理包含例如的 CellTemplates,情况可能并非如此。文本框或复选框。但是您可以轻松地优化测试以仅查找 ListViewItems —— 但在这种情况下,不要忘记处理单击位于任何 ListViewItem 之外并且搜索最终命中 ListView 本身的情况。

    关于WPF ListView ScrollViewer 双击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2485091/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com