然後是一些雜七雜八的 枚舉類啊 模型啊什麼的。
事件項xaml:
<UserControl 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:Custom="http://schemas.microsoft.com/surface/2008" x:Class="Transvalue.Timeline.TimelineEventItemControl"
Width="400" mc:Ignorable="d" Loaded="UserControl_Loaded">
<Grid>
<TextBlock Text="" Name="tbText" Margin="26,-10,-26,10"
Foreground="White" FontFamily="/Transvalue.Timeline;component/Fonts/#Segoe UI Light"
FontSize="18" HorizontalAlignment="Center" VerticalAlignment="Center"
MouseDown="TextBlock_MouseDown" TouchDown="tbText_TouchDown"
/>
</Grid>
<UserControl.Resources>
<Style x:Key="point">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},Path=DataContext}"
Value="1">
<DataTrigger.EnterActions>
<BeginStoryboard Name="big">
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Width" Duration="0:0:0.5"
To="800">
</DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},Path=DataContext}"
Value="0">
<DataTrigger.EnterActions>
<BeginStoryboard Name="Small">
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Width" Duration="0:0:0.5"
To="200">
</DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
</UserControl>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
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 Microsoft.Surface.Presentation.Controls;
namespace Transvalue.Timeline
{
/// <summary>
/// TimelineEventItemControl.xaml 的交互邏輯
/// </summary>
public partial class TimelineEventItemControl : UserControl
{
#region 加載ScatterView事件
public static readonly RoutedEvent ShowScatterEvent;
public class ShowScatterEventArgs : RoutedEventArgs
{
public UIElement svi
{
get;
set;
}
}
public delegate void ShowScatterEventHandler(object sender,
ShowScatterEventArgs e);
public event ShowScatterEventHandler ShowScatterEH
{
add
{
AddHandler(TimelineEventItemControl.ShowScatterEvent,
value);
}
remove
{
RemoveHandler(TimelineEventItemControl.ShowScatterEvent,
value);
}
}
#endregion
#region 加載詳細座標事件
public static readonly RoutedEvent ShowDetailEvent;
public class ShowDetailEventArgs : RoutedEventArgs
{
public TimeLineEnum.TimeLineBandType showMode
{
get;
set;
}
public DateTime startDate
{
get;
set;
}
public DateTime endDate
{
get;
set;
}
}
public delegate void ShowDetailEventHandler(object sender,
ShowDetailEventArgs e);
public event ShowDetailEventHandler ShowDetailEH
{
add
{
AddHandler(TimelineEventItemControl.ShowDetailEvent,
value);
}
remove
{
RemoveHandler(TimelineEventItemControl.ShowDetailEvent,
value);
}
}
#endregion
Dictionary<Predicate<TimelineEventEnum.TimelineEventType>, Action<TimelineEventItem>> OpenScatterDictAction =
new Dictionary<Predicate<TimelineEventEnum.TimelineEventType>, Action<TimelineEventItem>>();
static TimelineEventItemControl()
{
ShowScatterEvent = EventManager.RegisterRoutedEvent(
"ShowScatterEvent",
RoutingStrategy.Bubble,
typeof(ShowScatterEventHandler),
typeof(TimelineEventItemControl));
ShowDetailEvent = EventManager.RegisterRoutedEvent(
"ShowDetailEvent",
RoutingStrategy.Bubble,
typeof(ShowDetailEventHandler),
typeof(TimelineEventItemControl));
}
public TimelineEventItemControl()
{
InitializeComponent();
#region 打開窗體或打開scatterView
OpenScatterDictAction.Add(s => s == TimelineEventEnum.TimelineEventType.None, (o) =>
{
Console.WriteLine("無事件");
return;
});
OpenScatterDictAction.Add(s => s == TimelineEventEnum.TimelineEventType.Detail, (o) =>
{
var detailArgs = new ShowDetailEventArgs();
switch (o.Content)
{
case "month":
detailArgs.showMode = TimeLineEnum.TimeLineBandType.Days;
detailArgs.startDate = o.Date;
detailArgs.endDate = o.Date.AddMonths(1);
break;
case "year":
detailArgs.showMode = TimeLineEnum.TimeLineBandType.Months;
detailArgs.startDate = o.Date;
detailArgs.endDate = o.Date.AddYears(1);
break;
case "decade":
detailArgs.showMode = TimeLineEnum.TimeLineBandType.Years;
detailArgs.startDate = o.Date;
detailArgs.endDate = o.Date.AddYears(9);
break;
default:
return;
}
detailArgs.RoutedEvent = ShowDetailEvent;
RaiseEvent(detailArgs);
});
OpenScatterDictAction.Add(s => s == TimelineEventEnum.TimelineEventType.Book, (o) =>
{
var eventControl = new EventControlBookItem();
eventControl.DataContext = o;
var args = new ShowScatterEventArgs();
args.svi = eventControl;
args.RoutedEvent = ShowScatterEvent;
RaiseEvent(args);
});
OpenScatterDictAction.Add(s => s == TimelineEventEnum.TimelineEventType.Video, (o) =>
{
var eventControl = new EventVideoControlItem();
eventControl.DataContext = o;
var args = new ShowScatterEventArgs();
args.svi = eventControl;
args.RoutedEvent = ShowScatterEvent;
RaiseEvent(args);
});
#endregion
}
private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
{
OpenEventScatter();
}
private void OpenEventScatter()
{
var o = this.DataContext as TimelineEventItem;
if (null != o)
OpenScatterDictAction.Where(s => s.Key(o.EventType)).ForEach(s => s.Value(o));
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
var timelineEventItem = this.DataContext as TimelineEventItem;
if (null != timelineEventItem && timelineEventItem.EventType > TimelineEventEnum.TimelineEventType.Detail)
tbText.Text = timelineEventItem.Title;
else if (null != timelineEventItem && timelineEventItem.EventType ==
TimelineEventEnum.TimelineEventType.Detail)
{
Console.WriteLine(timelineEventItem.Date);
tbText.Text = "點擊展開";
}
else Console.WriteLine("沒有事件");
}
private void tbText_TouchDown(object sender, TouchEventArgs e)
{
OpenEventScatter();
}
}
}