ListView提供了一个DragItemsStarting事件,它附带事件参数。然而,与DragStartingEventArgs不同 - 与其他元素相同 - 据我所知,它不提供DragUI。我唯一的选择是使用非常烦人的DragOver事件。
所以,我反而说我将使ListViewItem的内容可拖动。然而,这种情况适得其反,因为现在Click事件已经不再存在,或者只是很少。简单地说,我可以自定义DragUI而不是单击我的ListItems,或者DragUI看起来很糟糕,但我保留了我的功能。
是否可以获得自定义DragUI并使ListView处理单击?
您仍然可以使用DragStarting
,但您必须将其添加到DataTemplate
中的项目内容本身:
<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<Grid CanDrag="True" DragStarting="ItemDragStartingHandler">
...
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
如果这导致click事件无法正常工作,您可以尝试自定义ListViewItem
容器本身,这可能有效。右键单击设计器或“文档大纲”窗口中的ListView
,选择“编辑其他模板”,然后选择“编辑生成的项容器”。从最后一个菜单中选择编辑副本...
你会得到一个可能很长的Style
,但在其中你会发现以下内容:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<ListViewItemPresenter DragStarting="ItemDragStartingHandler" x:Name="Root" ...>
您可以将DragStarting
事件应用于ListViewItemPresenter
,这可能会满足您的需求。