Xaml 有条件地激发项目单击

Xaml 有条件地激发项目单击,xaml,windows-runtime,Xaml,Windows Runtime,我有一个列表视图,其中填充了点击时应执行操作的项目,但仅当点击某些区域时: XAML: 在此代码中,e.OriginalSource始终是ListView,因此检查OriginalSource类型的方法不起作用 我也可以在单个ListView项上使用Tapped事件,但这会更改接收到的事件的类型(改为TappedRoutedEventArgs),因此我必须在堆栈的整个过程中更改处理程序签名,如果可能的话,我希望避免这样做。(我不能只创建一个新的ItemClickEventArgs,因为无法设置我

我有一个列表视图,其中填充了点击时应执行操作的项目,但仅当点击某些区域时:

XAML:

在此代码中,
e.OriginalSource
始终是
ListView
,因此检查
OriginalSource
类型的方法不起作用


我也可以在单个ListView项上使用
Tapped
事件,但这会更改接收到的事件的类型(改为
TappedRoutedEventArgs
),因此我必须在堆栈的整个过程中更改处理程序签名,如果可能的话,我希望避免这样做。(我不能只创建一个新的
ItemClickEventArgs
,因为无法设置我可以看到的值,而且它是一个密封的类,所以我不能对它进行子类化。)

如果要在ItemTemplate中单独放置应该接收事件的对象,而不是整个项目,则只需添加
ClickMode=“Pressed”
这些对象,它们将获取自己的事件,而不是被父项单击事件劫持。也就是说,只要我能正确理解你射击的目的。@ChrisW。我不确定您建议我在哪里添加
ClickMode
属性。Intellisense告诉我,它没有为ListView和我的自定义ListView项控件(它继承自
UserControl
)定义。因此,当我读到关于只希望项的某些区域响应某些单击事件的部分时,我想你是在ListView的ItemTemplate中放置按钮或其他东西,这是否正确?我正在侦听
ItemClick
对象中的
ListView
事件。
ListView
项目的某些部分具有不同类型的UI元素(不一定是按钮),我希望对其进行筛选,但仍然可以处理
ItemClick
事件。
<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);
    }
}