wpf+.net 4.5 surface2.0 = 异步多点触控 时间轴 part1

直接贴代码 废话不多说了。
运行环境  vs11 beta  framework4.5
surface runtime  surface sdk 2.0
多点触控模拟器 multitouchVista 或多点触控设备

源码请关注我的资源下载
功能说明: 多点触控时间轴,事件可缩放 旋转  多点同时操作 放大缩小等,

时间范围0001-9980年 定位精确到天

时间轴数据加载格式如下:

<?xml version="1.0" encoding="utf-8" ?>
<data>
  <event imgUrl="Sample_Photos"
         start="2011/1/05"
         mediaUrl ="C:\Resources\Video\test.mp4"
         type="2"
         title="苹果"
        >
   iphone4s

  </event>
</data>

 

主控件 1   XAML:

<UserControl x:Class="Transvalue.Timeline.TransvalueTimeline"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
        xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
             xmlns:Utils="clr-namespace:ComponentArt.Win.UI.Utils;assembly=ComponentArt.Win.UI.Common"
              xmlns:Transvalue="clr-namespace:Transvalue.Timeline" 
             mc:Ignorable="d" 
             Height="1080" Width="1920" Loaded="UserControl_Loaded">
    <Canvas x:Name="content" >
        <i:Interaction.Behaviors>
            <ei:FluidMoveBehavior  AppliesTo="Children"/>
        </i:Interaction.Behaviors>
        <Canvas Name="svContent" Width="1920" Height="1080" Canvas.Top="0" Panel.ZIndex="1" />
        <Transvalue:TimelineControl HorizontalAlignment="Left" x:Name="timeline" VerticalAlignment="Top" EndDate="2020-12-31" 
                                           StartDate="1900-01-01"
                                           DefaultTimelineMode="3"                                               
                                           DefaultItemWidth="400" Height="280" Width="1920" Canvas.Top="500">
            <Transvalue:TimelineControl.Background>
                <ImageBrush/>
            </Transvalue:TimelineControl.Background>
        </Transvalue:TimelineControl>


        <Utils:Spinner HorizontalAlignment="Left" Margin="50,700,0,0" Graphic="GlowWorm"
                       VerticalAlignment="Top" Name="glowWorm" Visibility="Hidden"/>
        <TextBlock Canvas.Left="108" TextWrapping="Wrap" Text="TransvalueOS——历史时间轴" Canvas.Top="61" FontSize="48" FontFamily="/Transvalue.Timeline;component/Fonts/#Segoe UI Light"/>
    </Canvas>
</UserControl>

 

主控件背后代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml.Linq;

namespace Transvalue.Timeline
{
    /// <summary>
    /// TransvalueTimeline.xaml 的交互逻辑
    /// </summary>
    public partial class TransvalueTimeline : UserControl
    {
        public TransvalueTimeline()
        {
            InitializeComponent();
            var data = from item in XElement.Load("Data.xml").Elements("event")
                       let title = item.Attribute("title")
                       let content = item.Attribute("content")
                       let date = item.Attribute("start")
                       let imgUrl = item.Attribute("imgUrl")
                       let mediaUrl = item.Attribute("mediaUrl")
                       let type = item.Attribute("type")
                       select new TimelineEventItem
                       {
                           Title = title.Value,
                           Content = item.Value,
                           Date = Convert.ToDateTime(date.Value),
                           MedieUrl = mediaUrl.Value,
                           ImgUrl = imgUrl.Value,
                           EventType = (TimelineEventEnum.TimelineEventType)Convert.ToInt32(type.Value)
                       };
            this.timeline.TimelineEventSource =
                new System.Collections.ObjectModel.ObservableCollection<TimelineEventItem>(data.OrderBy(item => item.Date));
        }

        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            timeline.LoadComplatedEH += LoadCompletedEvent;
            timeline.LoadingEH += LoadingEvent;
            timeline.ShowScatterEH += ((o, args) =>
            {
                this.ShowMdiWindow(args.svi);
            });
        }

        private async void LoadCompletedEvent(object sender, EventArgs e)
        {
            await Task.Factory.StartNew(() =>
            {
                svContent.Children.Clear();
                this.glowWorm.Visibility = System.Windows.Visibility.Hidden;
            }, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
        }

        private async void LoadingEvent(object sender, EventArgs e)
        {
            await Task.Factory.StartNew(() =>
            {
                this.glowWorm.Visibility = System.Windows.Visibility.Visible;
            }, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
        }

        private void ShowMdiWindow(UIElement svi)
        {
            Console.WriteLine(svi.GetType().BaseType.Name);
            if (svi.GetType().BaseType.Name.Equals("UserControl"))
            {
                Canvas.SetTop(svi, svContent.Height / 2);
                Canvas.SetLeft(svi, svContent.Width / 2);
                svContent.Children.Add(svi);
            }
            else
            {
                Window win = svi as Window;
                win.ManipulationStarting += ((sender, e) =>
                {
                    Console.WriteLine("开始多点操作");
                    e.Manipulators.ForEach(i => Console.WriteLine(i));
                });
                win.Show();
            }
        }
    }
}



 

转载于:https://www.cnblogs.com/wangrenzhu/archive/2012/05/24/2766830.html

相关推荐

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值