你可以处理
PreviewMouseLeftButtonDown
活动
ListViewItem
容器:
<ListView x:Name="listView">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListViewItem_PreviewMouseLeftButtonDown" />
<Style.Triggers>
<MultiDataTrigger>
...
</MultiDataTrigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
</ListView>
…就像这样:
private void ListViewItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
ListViewItem lvi = (ListViewItem)sender;
if (lvi.IsSelected)
{
listView.SelectedItems.Remove(lvi.DataContext);
e.Handled = true;
}
}
我放这个
EventSetter
在我的
Style
(此样式在另一个文件中)并获得此样式:“resourceDictionary”根元素需要
x:Class
属性以支持XAML文件中的事件处理程序…
如果你定义了
ItemContainerStyle
在一个
ResourceDictionary
,需要将代码隐藏文件添加到
字典资源
. 这是一件容易的事情:
Is it possible to set code behind a resource dictionary in WPF for event handling?
另一种选择是定义
风格
与
事件设置器
在视图中内联并基于
风格
与
MultiDataTrigger
您在中定义的
字典资源
:
<ListView x:Name="listView">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem" BasedOn="{StaticResource YourOtherStyleInTheResourceDictionary}">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListViewItem_PreviewMouseLeftButtonDown" />
</Style>
</ListView.ItemContainerStyle>
</ListView>