如何实现在新的Outlook应用程序的Win10滑动手势?

新的Outlook应用程序

新的Windows 10的Outlook应用程序实现滑动手势删除或编辑项目。我想实现这个function的ListView项目在我的通用应用程序使用C#和XAML。

到目前为止,我正在尝试以下方法:

XAML

<Grid Name="EditTestGrid" Height="50" Width="100" HorizontalAlignment="Right"> <Grid Name="EditGrid" Background="Black" Height="50" > <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> </Grid> </Grid> </Grid> <Grid Name="DataGrid" Visibility="Visible" Background="GhostWhite"> <Grid.RenderTransform> <TranslateTransform x:Name="TranslateGrid" X="0"/> </Grid.RenderTransform> <Grid> <Path Data="{Binding Art}" Stretch="Uniform" Fill="{Binding Colour}" Width="26" Height="26" HorizontalAlignment="Center" Opacity="0.5"/> <Rectangle Height="30" Width="3" HorizontalAlignment="Right" Fill="Teal"/> </Grid> </Grid> </Grid> </DataTemplate> </ListView.ItemTemplate> 

C#

 private void TestList_ManipulationCompleted(object sender,ManipulationCompletedRoutedEventArgs e) { Grid dataGrid = findElementInItemsControlItemAtIndex(TransactionList, TransactionList.SelectedIndex, "DataGrid") as Grid; if (dataGrid != null) { TranslateTransform myTranslate = new TranslateTransform(); double dist = e.Cumulative.Translation.X; if (dist < -80) { myTranslate.X = -100; dataGrid.RenderTransform = myTranslate; } if (dist > 40) { myTranslate.X = 0; dataGrid.RenderTransform = myTranslate; } } } private void TestList_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) { Grid dataGrid = findElementInItemsControlItemAtIndex(TransactionList, TransactionList.SelectedIndex, "DataGrid") as Grid; if (dataGrid != null) { TranslateTransform myTranslate = new TranslateTransform(); double dist = e.Cumulative.Translation.X; var manipulation = e.Delta; myTranslate.X += manipulation.Translation.X; dataGrid.RenderTransform = myTranslate; if (dist < -40) { myTranslate.X = -100; dataGrid.RenderTransform = myTranslate; } if (dist > 70) { myTranslate.X = 0; dataGrid.RenderTransform = myTranslate; } } 

}

这种方法只有在用户在列表视图中select一个项目,然后向左或向右滑动时才起作用。findElementInItemsControlItemAtIndex()方法只返回选定的控件,而不是返回操作的控件。

那么有没有办法select一个项目,只要操作开始一个项目? 也有任何库实现刷卡在列表视图中进行编辑或删除?

使用UIElement。 PointerPressed

 private void Target_PointerMoved(object sender, PointerRoutedEventArgs e) { var ptr = e.Pointer; if (ptr.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse) { var ptrPt = e.GetCurrentPoint(Target); } e.Handled = true; } 

更多关于PointerRoutedEventArgs 。

指针事件适用于您对多个指针及其关系感兴趣的场景,或者您正在检查每个指针的具体细节(如精确坐标位置)的情况。

一旦使用了GetCurrentPoint ,就可以协调用户指向的位置以及屏幕上的位置。要完成此操作,可以在VisualTreeHelper中使用FindElementsInHostCoordinates 。

好吧,我认为你有所有需要弄清楚的东西。

祝你好运!