Aviad P.的回答很好,并且巧妙地利用了附加属性,但我大多数时候倾向于使用不同的技术:
-
子类ListViewItem。
-
覆盖OnMouseLeftButtonDown和OnMouseRightButton以不执行任何操作。
-
重写OnMouseLeftButtonUp/OnMouseRightButtonUp以调用base.OnMouseLeftButtonDown/base.OnMouseRightButtonDown。
-
子类ListView。
-
重写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();
}
}
我喜欢这种技术,因为它涉及的代码更少。