c# - UWP 动画列表项移动
问题描述
在 ListView 中,添加和删除项目是通过漂亮的动画完成的。但是,当我移动一个项目(或对集合进行排序)时,没有漂亮的动画,它似乎只是重置了。
有谁知道我可以如何动画项目移动到他们的新位置?我在 ios 应用程序中看到过这种行为,在 UWP 中肯定有可能吗?
你可以在这个演示中看到删除动画很好,重新排序不是。
简单的代码示例:
Xaml
<Page
x:Class="ExampleApp.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:ExampleApp"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid>
<Button Name="btnReorder" Content="Reorder" Click="btnReorder_Click" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="32" />
<Button Name="btnRemove" Content="Remove" Click="btnRemove_Click" HorizontalAlignment="Left" Margin="100,10,0,0" VerticalAlignment="Top" Height="32" />
<ListView Name="list" Margin="0,200,0,0">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:MyData">
<Rectangle Width="100" Height="20" Fill="{x:Bind Path=Brush}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Page>
代码
using System.Collections.ObjectModel;
using Windows.UI;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media;
namespace ExampleApp
{
public sealed partial class MainPage : Page
{
ObservableCollection<MyData> myCollection = new ObservableCollection<MyData>();
public MainPage()
{
InitializeComponent();
myCollection.Add(new MyData() { Brush = new SolidColorBrush(Colors.Red) });
myCollection.Add(new MyData() { Brush = new SolidColorBrush(Colors.Blue) });
myCollection.Add(new MyData() { Brush = new SolidColorBrush(Colors.Orange) });
myCollection.Add(new MyData() { Brush = new SolidColorBrush(Colors.CornflowerBlue) });
myCollection.Add(new MyData() { Brush = new SolidColorBrush(Colors.Yellow) });
myCollection.Add(new MyData() { Brush = new SolidColorBrush(Colors.Green) });
list.ItemsSource = myCollection;
}
private void btnReorder_Click(object sender, RoutedEventArgs e)
{
// moving an item does not animate the move
myCollection.Move(2, 3);
}
private void btnRemove_Click(object sender, RoutedEventArgs e)
{
// removing does a nice animation
myCollection.RemoveAt(1);
}
}
public class MyData
{
public Brush Brush { get; set; }
}
}
谢谢!
解决方案
的模板ListView
已经包含这 4 个转换:
<AddDeleteThemeTransition/>
<ContentThemeTransition/>
<ReorderThemeTransition/>
<EntranceThemeTransition IsStaggeringEnabled="False"/>
我不知道为什么,但是ReorderThemeTransition应该在 Item 被移动时触发,但事实并非如此。
而不是move
,尝试使用这个:
private void btnReorder_Click(object sender, RoutedEventArgs e)
{
var obj = myCollection[2];
myCollection.RemoveAt(2);
myCollection.Insert(3, obj);
}
它有点像你想要的,不是完全的,而是一系列删除 - 添加动画。
希望有帮助。
推荐阅读
- ios - 如何在 Swift 中的 touchMoved 期间检测新视图?
- java - 同一台机器上不同项目中的控制台输出不正确
- bash - Docker - 在 Dockerfile 中运行配置脚本
- java - 为电子邮件实现 Spring Boot 服务
- c# - 在 WPF 中,如何使用路径标记语法绘制复合几何?
- webpack - 为什么 workbox-webpack-plugin 默认会排除名为 manifest*.js(on) 的文件?
- angularjs - 离子无限滚动反向
- apache-spark-sql - spark-dataframe 透视缺失的列/值
- c# - 在 Controler Asp net .core 中添加文章
- api - UrlFetchApp.fetch() 的深入调试?返回 - '地址不可用'