WP 8.1中ThemeTransition(ReorderThemeTransition和PaneThemeTransition)

回顾下动画过渡效果ThemeTransition有哪些:

EntranceThemeTransition - 页面间跳转时的过渡效果(已介绍,不再重复了)

ContentThemeTransition - 内容改变时的过渡效果(已介绍,不再重复了)

RepositionThemeTransition - 位置改变时的过渡效果(已介绍,不再重复了)

PopupThemeTransition - 弹出时的过渡效果(在Popup那一篇博客中出现过,不再重复了)

AddDeleteThemeTransition - 添加项或删除项时的过渡效果(已介绍,不再重复了)

ReorderThemeTransition - 对集合中的元素重新排序时的过渡效果(本篇介绍)

PaneThemeTransition - 基于边缘的较大 UI 滑入和滑出时的过渡效果(本篇介绍)

EdgeUIThemeTransition - 基于边缘的较小 UI 滑入和滑出时的过渡效果(在Popup那一篇博客中出现过,不再重复了)

先是ReorderThemeTransition - 对集合中的元素重新排序时的过渡效果

贴代码之前只要注意itemsControl.Items.Insert(1, rectangle)这句代码即可

表示向ItemsControl控件Items集合中插入Rectangle元素,而位置是从第二个开始插入,原来第二个位置的挤到第三

前台XAML:

<Page
    x:Class="TestUnion.ReorderThemeTransitionDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:TestUnion"
    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>
        <StackPanel>
            <Button x:Name="btnAdd" Content="添加" Click="btnAdd_Click" />
            <ItemsControl x:Name="itemsControl">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <WrapGrid>
                            <WrapGrid.ChildrenTransitions>
                                <TransitionCollection>
                                    <ReorderThemeTransition/>
                                </TransitionCollection>
                            </WrapGrid.ChildrenTransitions>
                        </WrapGrid>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
                <ItemsControl.Items>
                    <Rectangle Width="300" Height="50" Fill="Red"/>
                    <Rectangle Width="300" Height="50" Fill="Blue"/>
                    <Rectangle Width="300" Height="50" Fill="Green"/>
                </ItemsControl.Items>
                <ItemsControl.Template>
                    <ControlTemplate>
                        <Border BorderBrush="Coral" BorderThickness="5">
                            <ItemsPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </Border>
                    </ControlTemplate>
                </ItemsControl.Template>
            </ItemsControl>
        </StackPanel>
    </Grid>
</Page>

后台.cs:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.UI.Xaml.Shapes;

// “空白页”项模板在 http://go.microsoft.com/fwlink/?LinkID=390556 上有介绍

namespace TestUnion
{
    /// <summary>
    /// 可用于自身或导航至 Frame 内部的空白页。
    /// </summary>
    public sealed partial class ReorderThemeTransitionDemo : Page
    {
        public ReorderThemeTransitionDemo()
        {
            this.InitializeComponent();
        }

        /// <summary>
        /// 在此页将要在 Frame 中显示时进行调用。
        /// </summary>
        /// <param name="e">描述如何访问此页的事件数据。
        /// 此参数通常用于配置页。</param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
        }

        private void btnAdd_Click(object sender, RoutedEventArgs e)
        {
            Rectangle rectangle = new Rectangle();
            Random random = new Random();
            rectangle.Width = 300;
            rectangle.Height = 50;
            rectangle.Fill = new SolidColorBrush(Color.FromArgb(255, (byte)random.Next(0, 255), (byte)random.Next(0, 255), (byte)random.Next(255)));

            itemsControl.Items.Insert(1, rectangle);
        }
    }
}

运行截图:

初始界面以及点击一次添加按钮,点击多次添加按钮:

(前后对比会发现从第二个位置开始插入的)

  
 

再是PaneThemeTransition - 基于边缘的较大 UI 滑入和滑出时的过渡效果

需要注意的是PaneThemeTransition和EdgeUIThemeTransition的属性Edge

Edge ----- 用来设置UI从屏幕那一边滑入滑出

例如Edge="right",则说明UI会从屏幕右侧滑入

至于Popup的HorizontalOffset,VerticalOffset,IsLightDismissEnabled

以及如何在后台设置PaneThemeTransition和EdgeUIThemeTransition的Edge属性

可以参照我的专门关于Popup控件的那篇篇博客:Windows Phone 8.1中的Popup控件

前台XAML:

<Page
    x:Class="TestUnion.PaneThemeTransitionDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:TestUnion"
    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>
        <StackPanel Orientation="Vertical">
            <Popup x:Name="popup" IsLightDismissEnabled="True">
                <Popup.Child>
                    <!--大UI滑入滑出-->
                    <Border BorderBrush="Coral" Background="Green" BorderThickness="5" Width="400" Height="500">
                        <TextBlock Text="这是Popup里面的内容" FontSize="30"/>
                    </Border>
                    <!--小UI滑入滑出-->
                    <!--<Border BorderBrush="Coral" Background="Green" BorderThickness="5" Width="350" Height="100">
                        <TextBlock Text="这是Popup里面的内容" FontSize="30"/>
                    </Border>-->
                </Popup.Child>
                <Popup.ChildTransitions>
                    <TransitionCollection>
                        <!--默认Edge=right-->
                        <!--大UI滑入滑出过渡效果-->
                        <PaneThemeTransition Edge="Left" />
                        <!--小UI滑入滑出过渡效果-->
                        <!--<EdgeUIThemeTransition Edge="Right" />-->
                    </TransitionCollection>
                </Popup.ChildTransitions>
            </Popup>
            <Button x:Name="btnShowPane" Content="显示Pane" Click="btnShowPane_Click"/>
        </StackPanel>
    </Grid>
</Page>

后台.cs:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// “空白页”项模板在 http://go.microsoft.com/fwlink/?LinkID=390556 上有介绍

namespace TestUnion
{
    /// <summary>
    /// 可用于自身或导航至 Frame 内部的空白页。
    /// </summary>
    public sealed partial class PaneThemeTransitionDemo : Page
    {
        public PaneThemeTransitionDemo()
        {
            this.InitializeComponent();
        }

        /// <summary>
        /// 在此页将要在 Frame 中显示时进行调用。
        /// </summary>
        /// <param name="e">描述如何访问此页的事件数据。
        /// 此参数通常用于配置页。</param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
        }

        private void btnShowPane_Click(object sender, RoutedEventArgs e)
        {
            if(!popup.IsOpen)
            {
                popup.IsOpen = true;
            }
        }
    }
}

运行截图:

初始界面和点击显示Pane的按钮:

                   

还是那句话,截图看不了中间过渡动画效果,大家还是自行写一下感受下,这样印象才深一些

実に おもしろい

时间: 2024-10-01 20:51:53

WP 8.1中ThemeTransition(ReorderThemeTransition和PaneThemeTransition)的相关文章

如何给wp(Windows phone)中搜索关键字加亮?

问题来源 最近在群里看到群友讨论在wp中有个搜索功能,要求搜索关键字在搜索结果内容中加亮(即加颜色),由于wp中没有自带这样的控件,于是大家各抒自见,有人说用第三方控件,有人说用richtextbox,也有人说用textblock和run!那究竟哪种实现比较好呢?个人看法,当然是用textblock和run实现起来是最方便的! 实现要求 1.给出关键字(如:我,购物,菜鸟,技术),关键字可以一个或者多个,多个用英文逗号隔开 2.能在搜索结果中对关键字进行加亮 3.能自定义加亮的颜色 4.要求复用

如何删除WP系统程序中标题重复的文章

在迁移Wordpress数据的过程中(或者采集过程中),可能会遇到这种问题:同样一篇文章被导入了2次或者3次,这时候就要删除重复的文章了.SQL语句删除在Mysql中执行:    CREATE TABLE temp_table AS SELECT MIN(ID) AS col1 FROM wp_posts GROUP BY post_title;    DELETE FROM wp_posts WHERE ID NOT IN (SELECT col1 FROM temp_table);    D

在后台代码中动态生成pivot项并设置EventTrigger和Action的绑定

最近在做今日头条WP的过程中,遇到需要动态生成Pivot项的问题.第一个版本是把几个频道写死在xaml里了,事件绑定也写在xaml里,每个频道绑定一个ObservableCollection<ArticleItem>.xaml中一个Pivot项的代码大体如下: <phone:PivotItem Header="热点"> <Grid Margin="12,0,0,0" > <Grid.RowDefinitions> &l

WP Super Cache+七牛云配置CDN加速,让你的网站秒开

CDN加速网站是几乎所有的站长都在考虑的问题,CDN,全称是Content Delivery Network,即内容分发网络.所谓CDN加速,通俗的来说就是把原服务器上数据复制到其他服务器上,用户访问时,那台服务器近访问到的就是那台服务器 上的数据.CDN加速优点是成本低,速度快.CDN加速的方法和工具都很多,网上用的比较多的是“我爱水煮鱼”做的七牛镜像插件,这个插件很好用,但是也 有两个 bug 无法解决: 1.插件中的 JavaScript 和 CSS 无法镜像到七牛云存储中去. 2.部分主

介绍静态链接库和动态链接库的区别,及在VC++6.0中的建立和使用

首先介绍一下链接库:链接库分为动态链接库和静态链接库两种 LIB是静态链接库,在程序编译连接的时候是静态链接,其对应的文件格式是.lib.即当程序采用静态链接库的时候,.lib文件中的函数被链接到最终的可执行文件中,因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行. DLL是动态链接库,在程序运行的时候被调用,其对应的文件的格式是.dll.即当程序采用动态链接的时候,.dll文件中的函数并没有被链接到可执行文件中,可执行文件只是保存了函数的地址信息.但是

【WP 8.1开发】文件选取器的使用方法

在以往的WP7x/8.0开发中,我们使用选择器可以浏览并打开图片.音频.视频等一些特殊文件,在8.0 SDK中的运行时API(从Win 8 app中移植)尽管提供了Windows.Storage.Pickers命名空间,但里面的Picker是不能用的,到了8.1,随着移植的深入和WP的完善,这些Picker们终于可以派上用场了,比如用于打开文件的FileOpenPicker类,用来保存文件的FileSavePicker类等. 使用Picker的好处在于,文件类型不必被限制为特定的几个,而是可以根

说说WordPress的主查询函数-query_posts()

今天说说WordPress 的主查询函数 -query_posts(),因为我正在制作的主题里面多次用到了这个函数 . query_posts()查询函数决定了哪些文章出现在WordPress 主 循环(loop)中,正因为如此,query_posts函数仅用于修改主页循环(Loop),而不是在页面上生成次级循环.如果你希望在主循环外另外生 成循环,应该新建独立的WP_Query对象,用这些对象生成循环.在主循环外的循环上使用query_posts会导致主循环运行偏差,并可能在页面上 显示出你不

Windows Phone开发(5):室内装修

为什么叫室内装修呢?呵呵,其实说的是布局,具体些嘛,就是在一个页面中,你如何去摆放你的控件,如何管理它们,你说,像不像我们刚搬进新住所,要"装修"一番?买一套什么样的茶几和杯具(我说的"杯具"指的是原意,不要理解错了),或者沙发什么的,该怎么放,摆在哪里好看,其实,我们做界面设计也是差不多这个道理. 相信我们下过象棋就知道,棋盘上有横向的,纵向的很多网格线,而棋子就是参照这些网格线来放置的,对,在WP页面布局中我们把这样的布局称为网格布局,对应的控件为Grid. 千

(转)WordPress的主查询函数-query_posts()

今天说说WordPress 的主查询函数 -query_posts(),因为我正在制作的主题里面多次用到了这个函数 . query_posts()查询函数决定了哪些文章出现在WordPress 主 循环(loop)中,正因为如此,query_posts函数仅用于修改主页循环(Loop),而不是在页面上生成次级循环.如果你希望在主循环外另外生 成循环,应该新建独立的WP_Query对象,用这些对象生成循环.在主循环外的循环上使用query_posts会导致主循环运行偏差,并可能在页面上 显示出你不