日期:2014-05-16 浏览次数:20873 次
本文章将以如何实现 开始菜单上的tile 为主。
该控件代码经过测试可直接使用。

tile 在我的思路中分为了 3层。
基于ContentControl实现HeaderedContentControl 用于增加Tile种的内容标题
在HeaderedContentControl 的基础上 实现 3d变换 根据触点方向触发不同动画。
实现HubTileBase
在HubTileBase 下我们可以实现多种磁贴
如liveTile(实时反馈) MosaicTile(仿wp8 风格) PulsingTile(脉冲)等等。。
以下将以PulsingTile 代码为主 来介绍
public class HeaderedContentControl : ContentControl
{
public static readonly DependencyProperty HeaderProperty =
DependencyProperty.Register("Header", typeof(object), typeof(HeaderedContentControl), new PropertyMetadata(null));
public static readonly DependencyProperty HeaderStyleProperty =
DependencyProperty.Register("HeaderStyle", typeof(Style), typeof(HeaderedContentControl), new PropertyMetadata(null));
public static readonly DependencyProperty HeaderTemplateProperty =
DependencyProperty.Register("HeaderTemplate", typeof(DataTemplate), typeof(HeaderedContentControl), new PropertyMetadata(null));
public static readonly DependencyProperty HeaderTemplateSelectorProperty =
DependencyProperty.Register("HeaderTemplateSelector", typeof(DataTemplateSelector), typeof(HeaderedContentControl), new PropertyMetadata(null));
public HeaderedContentControl()
{
this.DefaultStyleKey = typeof(HeaderedContentControl);
}
public object Header
{
get
{
return base.GetValue(HeaderProperty);
}
set
{
base.SetValue(HeaderProperty, value);
}
}
public Style HeaderStyle
{
get
{
return (Style)base.GetValue(HeaderStyleProperty);
}
set
{
base.SetValue(HeaderStyleProperty, value);
}
}
public DataTemplate HeaderTemplate
{
get
{
return (DataTemplate)base.GetValue(HeaderTemplateProperty);
}
set
{
base.SetValue(HeaderTemplateProperty, value);
}
}
public DataTemplateSelector HeaderTemplateSelector
{
get
{
return (DataTemplateSelector)base.GetValue(HeaderTemplateSelectorProperty);
}
set
{
base.SetValue(HeaderTemplateSelectorProperty, value);
}
}
}
public class HubTileBase : HeaderedContentControl
{
public static readonly DependencyProperty AccentBrushProperty = DependencyProperty.Register("AccentBrush", typeof(Brush), typeof(HubTileBase), new PropertyMetadata(null));
public static readonly DependencyProperty GroupNameProperty = DependencyProperty.Register("GroupName", typeof(string), typeof(HubTileBase), new PropertyMetadata(string.Empty));
public static readonly DependencyProperty ImageSourceProperty = DependencyProperty.Register("ImageSource", typeof(Windows.UI.Xaml.Media.ImageSource), typeof(HubTileBase), new PropertyMetadata(null));
public static readonly DependencyProperty IsFrozenProperty = DependencyProperty.Register("IsFrozen", typeof(bool), typeof(HubTileBase), new PropertyMetadata((bool)false, OnIsFrozenChanged));
public static readonly DependencyProperty OverrideDefaultStatesProperty = DependencyProperty.Register("OverrideDefaultStates", typeof(bool), typeof(HubTileBase), new PropertyMetadata((bool)fal