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

时间:2015-01-29 09:24:48

标签: c# windows windows-runtime winrt-xaml win-universal-app

New Outlook App

Windows 10的新Outlook应用程序实现了滑动手势以删除或编辑Items.I希望使用C#和XAML在我的通用应用程序中为Listview项实现此功能。

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

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;

    }
}

}

此方法仅在用户选择listview中的项目然后向左或向右滑动时才有效.regetElementInItemsControlItemAtIndex()方法仅返回所选控件,而不返回正在进行操作的控件。

一旦项目开始操作,有没有办法选择项目?还有用于在listview中实现滑动编辑或删除的库吗?

1 个答案:

答案 0 :(得分:4)

使用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

好的,我认为你已经掌握了所需的所有内容。

祝你好运!