代码之家  ›  专栏  ›  技术社区  ›  Prashant Cholachagudda

WPF列表视图修改

  •  1
  • Prashant Cholachagudda  · 技术社区  · 15 年前

    因为一个非常具体的原因,我想选择 ListViewItem

    2 回复  |  直到 13 年前
        1
  •  2
  •   Ray Burns    15 年前

    Aviad P.的回答很好,并且巧妙地利用了附加属性,但我大多数时候倾向于使用不同的技术:

    1. 子类ListViewItem。
    2. 覆盖OnMouseLeftButtonDown和OnMouseRightButton以不执行任何操作。
    3. 重写OnMouseLeftButtonUp/OnMouseRightButtonUp以调用base.OnMouseLeftButtonDown/base.OnMouseRightButtonDown。
    4. 子类ListView。
    5. 重写GetContainerForItemOverride()以返回ListViewItem重写

    这就是它看起来的样子:

    public class MouseUpListViewItem : ListViewItem
    {
      protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) {}
      protected override void OnMouseRightButtonDown(MouseButtonEventArgs e) {}
    
      protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
      {
        base.OnMouseLeftButtonDown(e);
      }
      protected override void OnMouseRightButtonUp(MouseButtonEventArgs e)
      {
        base.OnMouseRightButtonDown(e);
      }
    }
    public class MouseUpListView : ListView
    {
      protected override DependencyObject GetContainerForItemOverride()
      {
        return new MouseUpListViewItem();
      }
    }
    

    我喜欢这种技术,因为它涉及的代码更少。

        2
  •  3
  •   Aviad P.    15 年前

    SelectOnMouseUp 当它设置为真时,勾住你的 ItemsContainerGenerator 添加新项目容器时要发现的事件。然后,当您获得一个新项目容器的事件时,钩住它的 PreviewMouseDown 然后忽略它(设置 e.Handled ,并钩住它的 MouseUp IsSelected true