出于一个非常特殊的原因,我想在鼠标按钮上选择ListViewItem
,而不是实际按下鼠标按钮。我希望将此行为嵌入控件中。是否有可能实现这一目标?任何人都可以提示吗?
答案 0 :(得分:3)
是的,绝对可以使用附加属性。定义名为SelectOnMouseUp
的附加属性,当它设置为true时,挂钩ItemsContainerGenerator
事件以发现添加新项目容器的时间。然后,当您获得新项容器的事件时,挂钩到其PreviewMouseDown
并忽略它(将e.Handled
设置为true),并挂钩到其MouseUp
事件并执行选择(设置IsSelected
至true
)。
答案 1 :(得分:2)
Aviad P.的回答很好,巧妙地使用附加属性,但我倾向于在大多数时候使用不同的技术:
这比订阅ItemContainer事件和动态添加处理程序更容易。
这就是它的样子:
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();
}
}
我喜欢这种技术,因为涉及的代码较少。