我有一个ListView,其中填充的项目应该在点击时执行操作,但仅限于在某些区域点击时:
XAML:
<ListView
SelectionMode="None"
IsItemClickEnabled="True"
ItemClick="MyListView_ItemClick">
<ListView.ItemTemplate>
<DataTemplate>
<custom:MyListViewItemControl Tapped="ListViewItem_Tapped"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
代码隐藏:
private void MyListView_ItemClick(object sender, ItemClickEventArgs e)
{
if (e.OriginalSource is Image) return; // Ignore if clicked on Image
if (this.ItemClickHandler != null)
{
this.ItemClickHandler(this, e);
}
}
在此代码中,e.OriginalSource
始终为ListView
,因此检查OriginalSource
类型的方法不起作用。
我也可以在单个ListView项目上使用Tapped
事件,但这会更改收到的事件类型(到TappedRoutedEventArgs
),所以我必须一直更改我的处理程序签名堆栈,如果可能的话,我想避免。 (我不能只创建一个新的ItemClickEventArgs
因为没有办法设置我能看到的值,而且它是一个密封的类,所以我不能将它子类化。)