持有桌面应用程序未触发的事件

时间:2016-01-25 14:58:16

标签: xaml touch win-universal-app

在我的通用Windows应用中,我订阅了我的ListViewItem DataTemplat中的举办活动 e:

        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid Holding="ListViewItem_Holding">
                    <FlyoutBase.AttachedFlyout>
                        <MenuFlyout Placement="Right">
                            <!-- using the Click event -->
                            <MenuFlyoutItem Text="delete" Click="DeleteProductClick" />

                            <MenuFlyoutItem Text="edit" />
                        </MenuFlyout>
                    </FlyoutBase.AttachedFlyout>
                    <TextBlock Text="{Binding Name}" />
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>

使用Visual Studio模拟器和触摸模式都可以正常工作,但我无法找到使用鼠标调用上下文菜单的方法。我是否必须使用GestureRecognizer才能使上下文菜单适用于桌面应用程序(而不是平板电脑版本)?

2 个答案:

答案 0 :(得分:3)

我会改为使用RightTapped事件,以便当用户持有基于触摸的设备中的项目时以及用户在基于鼠标的设备中使用鼠标右键单击时显示上下文菜单:

<Page.Resources>
   <MenuFlyout x:Key="flyout">
     ...
   </MenuFlyout>

</Page.Resources>
...

<ListView ....>
  <ListView.ItemTemplate>
     <DataTemplate>
       <Grid RightTapped="grid_RightTapped">
            ...
       </Grid>
    </DataTemplate>
  </ListView.ItemTemplate>
</ListView>

然后在代码后面处理事件:

private void grid_RightTapped(object sender, RightTappedRoutedEventArgs e) { 
   this.flyout.ShowAt(this, e.GetPosition(this));
   e.Handled = true;
}

如你所见,我使用了共享弹出窗口,你可以按照自己的方式使用。

答案 1 :(得分:1)

您将在MSDN找到:

  

抓住鼠标和钢笔/手写笔输入

     

默认情况下,鼠标输入不会产生保持事件,无论按住鼠标按钮多长时间,或按住哪个按钮。但是,当按下并释放鼠标右键或等效按钮时,鼠标设备和某些笔设备可以触发RightTapped。

     

注意如果您使用自己的GestureRecognizer并在设置中指定HoldWithMouse,则可以将鼠标操作视为保留操作。

在这种情况下,您可能必须使用自定义GestureRecognizer或使用指针事件。