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中实现滑动编辑或删除的库吗?
答案 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;
}
指针事件适用于您对多个指针及其关系感兴趣的场景,或者您正在检查每个指针的细节,例如精确坐标位置。
使用GetCurrentPoint后,您可以协调用户指向的位置以及该位置屏幕上的内容。要完成此操作,您可以在VisualTreeHelper中使用FindElementsInHostCoordinates。
好的,我认为你已经掌握了所需的所有内容。
祝你好运!