欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > 内容正文

SliderHubTile 用windows8制作仿wp8翻转瓷砖

来源: 开发者 投稿于  被查看 46547 次 评论:102

SliderHubTile 用windows8制作仿wp8翻转瓷砖


[html]  
<ContentControl   
    xmlns:Controls="using:WinRTXamlToolkit.Controls"   
    x:Class="TSM.View.Control.HubTile"  
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"  
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  
    mc:Ignorable="d"   
    x:Name="gridViewItem"  
    d:DesignHeight="150"  
    d:DesignWidth="150" IsTapEnabled="False" IsRightTapEnabled="False" IsHoldingEnabled="False" IsDoubleTapEnabled="False">  
    <ContentControl.Resources>  
  
        <Storyboard x:Name="UpperSecStoryboard">  
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Storyboard.TargetName="Img2">  
                <DiscreteDoubleKeyFrame KeyTime="0:0:0.4" Value="0"/>  
                <DiscreteDoubleKeyFrame KeyTime="0:0:0.8" Value="1"/>  
            </DoubleAnimationUsingKeyFrames>  
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationX)" Storyboard.TargetName="Img2">  
                <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="90">  
                    <EasingDoubleKeyFrame.EasingFunction>  
                        <QuadraticEase EasingMode="EaseIn"></QuadraticEase>  
                    </EasingDoubleKeyFrame.EasingFunction>  
                </EasingDoubleKeyFrame>  
                <EasingDoubleKeyFrame KeyTime="0:0:0.8" Value="-90">  
                    <EasingDoubleKeyFrame.EasingFunction>  
                        <QuadraticEase EasingMode="EaseIn"></QuadraticEase>  
                    </EasingDoubleKeyFrame.EasingFunction>  
                </EasingDoubleKeyFrame>  
            </DoubleAnimationUsingKeyFrames>  
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationX)" Storyboard.TargetName="Img1">  
                <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="-90">  
                    <EasingDoubleKeyFrame.EasingFunction>  
                        <QuadraticEase EasingMode="EaseIn"></QuadraticEase>  
                    </EasingDoubleKeyFrame.EasingFunction>  
                </EasingDoubleKeyFrame>  
                <EasingDoubleKeyFrame KeyTime="0:0:0.8" Value="0">  
                    <EasingDoubleKeyFrame.EasingFunction>  
                        <QuadraticEase EasingMode="EaseIn"></QuadraticEase>  
                    </EasingDoubleKeyFrame.EasingFunction>  
                </EasingDoubleKeyFrame>  
            </DoubleAnimationUsingKeyFrames>  
        </Storyboard>  
        <Storyboard x:Name="UpperFirstStoryboard">  
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Storyboard.TargetName="Img1">  
                <DiscreteDoubleKeyFrame KeyTime="0:0:0.4" Value="0"/>  
                <DiscreteDoubleKeyFrame KeyTime="0:0:0.8" Value="1"/>  
            </DoubleAnimationUsingKeyFrames>  
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationX)" Storyboard.TargetName="Img1">  
                <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="90">  
                    <EasingDoubleKeyFrame.EasingFunction>  
                        <QuadraticEase EasingMode="EaseIn"></QuadraticEase>  
                    </EasingDoubleKeyFrame.EasingFunction>  
                </EasingDoubleKeyFrame>  
                <EasingDoubleKeyFrame KeyTime="0:0:0.8" Value="-90">  
                    <EasingDoubleKeyFrame.EasingFunction>  
                        <QuadraticEase EasingMode="EaseIn"></QuadraticEase>  
                    </EasingDoubleKeyFrame.EasingFunction>  
                </EasingDoubleKeyFrame>  
            </DoubleAnimationUsingKeyFrames>  
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationX)" Storyboard.TargetName="Img2">  
                <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="-90">  
                    <EasingDoubleKeyFrame.EasingFunction>  
                        <QuadraticEase EasingMode="EaseIn"></QuadraticEase>  
                    </EasingDoubleKeyFrame.EasingFunction>  
                </EasingDoubleKeyFrame>  
                <EasingDoubleKeyFrame KeyTime="0:0:0.8" Value="0">  
                    <EasingDoubleKeyFrame.EasingFunction>  
                        <QuadraticEase EasingMode="EaseIn"></QuadraticEase>  
                    </EasingDoubleKeyFrame.EasingFunction>  
                </EasingDoubleKeyFrame>  
            </DoubleAnimationUsingKeyFrames>  
        </Storyboard>  
    </ContentControl.Resources>  
    <Grid Width="{Binding Width, ElementName=gridViewItem}" Height="{Binding Height, ElementName=gridViewItem}">  
        <Grid.Background>  
            <ImageBrush/>  
        </Grid.Background>  
        <Canvas x:Name="PART_LayoutRoot" >  
            <Canvas x:Name="PART_Panel">  
                <Canvas   
                    Height="{Binding Height, ElementName=gridViewItem}"   
                    x:Name="FirstImg">  
                    <Grid  x:Name="PART_FirstContent">  
                        <Image x:Name="Img1"   
                               Width="{Binding Width, ElementName=gridViewItem}"   
                               Height="{Binding Height, ElementName=gridViewItem}"  
                               Stretch="Fill" VerticalAlignment="Center"  
                               Canvas.ZIndex="1">  
                            <Image.Projection>  
                                <PlaneProjection/>  
                            </Image.Projection>  
                        </Image>  
                    </Grid>  
                    <Canvas.RenderTransform>  
                        <CompositeTransform/>  
                    </Canvas.RenderTransform>  
                </Canvas>  
                <Canvas   
                    x:Name="SecImg"   
                    Height="{Binding Height, ElementName=gridViewItem}">  
                    <Canvas.RenderTransform>  
                        <CompositeTransform/>  
                    </Canvas.RenderTransform>  
                    <Grid x:Name="SecGrid">  
                        <Image x:Name="Img2"  
                            Width="{Binding Width, ElementName=gridViewItem}"   
                            Height="{Binding Height, ElementName=gridViewItem}"  
                            Stretch="Fill" VerticalAlignment="Center">  
                            <Image.Projection>  
                                <PlaneProjection RotationX="-90"/>  
                            </Image.Projection>  
                        </Image>  
                    </Grid>  
                </Canvas>  
            </Canvas>  
        </Canvas>  
    </Grid>  
</ContentControl>  
 
 
代码:
[csharp]  
using System;  
using System.Collections.Generic;  
using System.Collections.ObjectModel;  
using System.Diagnostics;  
using System.IO;  
using System.Linq;  
using System.Threading.Tasks;  
using TSM.Config;  
using TSM.Tools;  
using Windows.Foundation;  
using Windows.Foundation.Collections;  
using Windows.Storage;  
using Windows.Storage.BulkAccess;  
using Windows.Storage.Search;  
using Windows.Storage.Streams;  
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.Media.Animation;  
using Windows.UI.Xaml.Media.Imaging;  
using Windows.UI.Xaml.Navigation;  
using WinRTXamlToolkit.AwaitableUI;  
using WinRTXamlToolkit.Controls;  
using WinRTXamlToolkit.Imaging;  
// “用户控件”项模板在 http://go.microsoft.com/fwlink/?LinkId=234236 上提供  
  
namespace TSM.View.Control  
{  
    public sealed partial class HubTile : ContentControl  
    {  
        private static Uri _baseUri = new Uri("ms-appx:///");  
        #region propdp  
        #region ImgList  
        public ObservableCollection<string> ImgList  
        {  
            get { return (ObservableCollection<string>)GetValue(ImgListProperty); }  
            set { SetValue(ImgListProperty, value); }  
        }  
  
        // Using a DependencyProperty as the backing store for ImgList.  This enables animation, styling, binding, etc...  
        public static readonly DependencyProperty ImgListProperty =  
            DependencyProperty.Register(  
            "ImgList",  
            typeof(ObservableCollection<string>),  
            typeof(HubTile),  
            new PropertyMetadata(null, OnImgListChanged));  
  
        private static void OnImgListChanged(  
           DependencyObject d, DependencyPropertyChangedEventArgs e)  
        {  
            var target = (HubTile)d;  
        }  
 
        #endregion  
 
        #endregion  
  
        protected override void OnGotFocus(RoutedEventArgs e)  
        {  
            base.OnGotFocus(e);  
        }  
  
        public HubTile()  
        {  
            this.InitializeComponent();  
            Storyboard storySec = null;  
            Storyboard storyFir = null;  
            DispatcherTimer timer = new DispatcherTimer();  
            int index = 0;  
            bool isFirst = true;  
  
            this.Loaded += ((sender, e) =>  
            {  
                storySec = Resources["UpperSecStoryboard"] as Storyboard;  
                storyFir = Resources["UpperFirstStoryboard"] as Storyboard;  
                if (null != ImgList && ImgList.Count > 0)  
                {  
                    BitmapImage _source = new BitmapImage();  
                    var url = ImgList[0];  
                    Uri uri = null;  
                    if (null != url)  
                    {  
                        if (url.StartsWith(".") || url.StartsWith("ms"))  
                        {  
                            uri = new Uri(HubTile._baseUri, url);  
                            _source.UriSource = uri;  
                        }  
                        else if (url.StartsWith("http://"))  
                        {  
                            uri = new Uri(url);  
                            _source.UriSource = uri;  
                        }  
                        else  
                            SetSource(_source, url);  
                        this.Img1.Source = _source;  
                        if (ImgList.Count >= 2)  
                        {  
                            if (null != timer)  
                                timer.Start();  
                        }  
                    }  
                }  
            });  
  
            this.Unloaded += ((sender, e) =>  
            {  
                if (null != timer)  
                    timer.Stop();  
                this.Img1.Source = null;  
                this.Img2.Source = null;  
            });  
            Random r = new Random(Convert.ToInt32(DateTime.Now.Millisecond));  
            var second = r.Next(2000, 6000);  
  
            Debug.WriteLine(this.Name + "间隔时间:" + second);  
            timer.Interval = TimeSpan.FromMilliseconds(second);  
            timer.Tick += (async (o, b) =>  
            {  
                index++;  
                if (ImgList == null)  
                {  
                    timer.Stop();  
                }  
                else  
                {  
                    var count = ImgList.Count;  
                    if (null != ImgList && count != 0)  
                    {  
                        var url = ImgList[index % count];  
                        Uri uri = null;  
                        BitmapImage _source = new BitmapImage();  
                        _source.DecodePixelHeight = 200;  
                        _source.DecodePixelWidth = 200;  
                        if (url.StartsWith(".") || url.StartsWith("ms"))  
                        {  
                            if (url.StartsWith("."))  
                                uri = new Uri(HubTile._baseUri, url);  
                            else  
                                uri = new Uri(url);  
                            _source.UriSource = uri;  
                        }  
                        else if (url.StartsWith("http://"))  
                        {  
                            _source.UriSource = new Uri(url);  
                        }  
                        else  
                            _source = await GetLocalImageSource(url);  
                        Debug.WriteLine(this.Name + "加载图片..." + url);  
                        if (isFirst)  
                        {  
  
                            isFirst = false;  
                            await storySec.BeginAsync();  
                            this.Img2.Source = _source;  
                            Canvas.SetZIndex(SecImg, 1);  
                            Canvas.SetZIndex(FirstImg, 2);  
                        }  
                        else  
                        {  
                            isFirst = true;  
                            await storyFir.BeginAsync();  
                            this.Img1.Source = _source;  
                            Canvas.SetZIndex(SecImg, 2);  
                            Canvas.SetZIndex(FirstImg, 1);  
                        }  
                    }  
                }  
            });  
        }  
  
        private async Task<BitmapImage> GetLocalImageSource(string url)  
        {  
            StorageFile file = await StorageFile.GetFileFromPathAsync(url);  
            var img = await file.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.PicturesView, 400, Windows.Storage.FileProperties.ThumbnailOptions.ResizeThumbnail);  
            BitmapImage bitmapImage = new BitmapImage();  
            await bitmapImage.SetSourceAsync(img);  
            return bitmapImage;  
  
        }  
  
        private async void SetSource(BitmapSource _source, string url)  
        {  
            try  
            {  
                _source = await GetLocalImageSource(url);  
            }  
            catch (Exception)  
            {  
                _source = null;  
            }  
        }  
  
    }  
}  
 
 

相关文章

    暂无相关文章
相关频道:

用户评论