wp7 中 HubTile控件自定义大小。
http://blog.csdn.net/matrixcl/article/details/7057291 (转)
Toolkit(http://silverlight.codeplex.com/)中有一个不错的控件:HubTile。
但这个控件只能用于173*173的Tile,如果想放其他尺寸的的就麻烦一些了(一行并排3个显示的Tile)
下面是实现可重定义tile大小的完整代码
步骤1:写一个Converner类,用于缩放double类型的数值
需要命名空间:
using System.Globalization;
using System.Windows.Data;
- <span style="font-size:18px;"> public class DoubleScaleConverner : IValueConverter
- {
- public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
- {
- if (value is double && targetType == typeof(double))
- {
- double dbOrig = (double)value;
- if (parameter is string)
- {
- double dbParam;
- if (double.TryParse((parameter as string), out dbParam))
- {
- return Math.Round(dbOrig * dbParam);
- }
- }
- }
- return value;
- }
- public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
- {
- return null;
- }
- }</span>
2. ResourceDictionary文件中,将converner声明出来
- <span style="font-size:18px;">xmlns:my="clr-namespace:HubTileTest"
- an>
- <span style="font-size:18px;"> <my:DoubleScaleConverner x:Key="doubleScaleConverner" /></span>
3. 用blend生成hubtile的style,并做修改成这样
- <span style="font-size:18px;"><Style x:Key="customHubTileStyle" TargetType="toolkit:HubTile">
- <Style.Setters>
- <Setter Property="Height" Value="173"/>
- <Setter Property="Width" Value="173"/>
- <Setter Property="Background" Value="{StaticResource PhoneAccentBrush}"/>
- <Setter Property="Foreground" Value="#FFFFFFFF"/>
- <Setter Property="Template">
- <Setter.Value>
- <ControlTemplate TargetType="toolkit:HubTile">
- <StackPanel x:Name="Viewport"
- Height="{TemplateBinding Height}" Width="{TemplateBinding Width}">
- <StackPanel.Resources>
- <CubicEase EasingMode="EaseOut" x:Key="HubTileEaseOut"/>
- </StackPanel.Resources>
- <StackPanel.Projection>
- <PlaneProjection CenterOfRotationY="0.25" x:Name="ViewportProjection"/>
- </StackPanel.Projection>
- <VisualStateManager.VisualStateGroups>
- <VisualStateGroup x:Name="ImageStates">
- <VisualStateGroup.Transitions>
- <VisualTransition x:Name="ExpandedToSemiexpanded"
- From="Expanded" To="Semiexpanded"
- GeneratedDuration="0:0:0.85">
- <Storyboard>
- <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"
- Storyboard.TargetName="TitlePanel">
- <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=-1}" EasingFunction="{StaticResource HubTileEaseOut}"/>
- <EasingDoubleKeyFrame KeyTime="0:0:0.85" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=-0.45665}" EasingFunction="{StaticResource HubTileEaseOut}"/>
- </DoubleAnimationUsingKeyFrames>
- <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="RotationX"
- Storyboard.TargetName="ViewportProjection">
- <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="0.0" EasingFunction="{StaticResource HubTileEaseOut}"/>
- </DoubleAnimationUsingKeyFrames>
- </Storyboard>
- </VisualTransition>
- <VisualTransition x:Name="SemiexpandedToCollapsed"
- From="Semiexpanded" To="Collapsed"
- GeneratedDuration="0:0:0.85">
- <Storyboard>
- <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"
- Storyboard.TargetName="TitlePanel">
- <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=-0.45665}" EasingFunction="{StaticResource HubTileEaseOut}"/>
- <EasingDoubleKeyFrame KeyTime="0:0:0.85" Value="0.0" EasingFunction="{StaticResource HubTileEaseOut}"/>
- </DoubleAnimationUsingKeyFrames>
- </Storyboard>
- </VisualTransition>
- <VisualTransition x:Name="CollapsedToExpanded"
- From="Collapsed" To="Expanded"
- GeneratedDuration="0:0:0.85">
- <Storyboard>
- <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"
- Storyboard.TargetName="TitlePanel">
- <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="0.0" EasingFunction="{StaticResource HubTileEaseOut}"/>
- <EasingDoubleKeyFrame KeyTime="0:0:0.85" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=-1}" EasingFunction="{StaticResource HubTileEaseOut}"/>
- </DoubleAnimationUsingKeyFrames>
- </Storyboard>
- </VisualTransition>
- <VisualTransition x:Name="ExpandedToFlipped"
- From="Expanded" To="Flipped"
- GeneratedDuration="0:0:0.85">
- <Storyboard>
- <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"
- Storyboard.TargetName="TitlePanel">
- <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=-1}" EasingFunction="{StaticResource HubTileEaseOut}"/>
- </DoubleAnimationUsingKeyFrames>
- <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)"
- Storyboard.TargetName="Image">
- <DiscreteObjectKeyFrame KeyTime="0:0:0.185" Value="Collapsed"/>
- </ObjectAnimationUsingKeyFrames>
- <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="RotationX"
- Storyboard.TargetName="ViewportProjection">
- <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="0.0" EasingFunction="{StaticResource HubTileEaseOut}"/>
- <EasingDoubleKeyFrame KeyTime="0:0:0.85" Value="180.0" EasingFunction="{StaticResource HubTileEaseOut}"/>
- </DoubleAnimationUsingKeyFrames>
- </Storyboard>
- </VisualTransition>
- <VisualTransition x:Name="FlippedToExpanded"
- From="Flipped" To="Expanded"
- GeneratedDuration="0:0:0.85">
- <Storyboard>
- <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"
- Storyboard.TargetName="TitlePanel">
- <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=-1}" EasingFunction="{StaticResource HubTileEaseOut}"/>
- </DoubleAnimationUsingKeyFrames>
- <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)"
- Storyboard.TargetName="Image">
- <DiscreteObjectKeyFrame KeyTime="0:0:0.185" Value="Visible"/>
- </ObjectAnimationUsingKeyFrames>
- <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="RotationX"
- Storyboard.TargetName="ViewportProjection">
- <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="180.0" EasingFunction="{StaticResource HubTileEaseOut}"/>
- <EasingDoubleKeyFrame KeyTime="0:0:0.85" Value="360.0" EasingFunction="{StaticResource HubTileEaseOut}"/>
- </DoubleAnimationUsingKeyFrames>
- </Storyboard>
- </VisualTransition>
- </VisualStateGroup.Transitions>
- <VisualStateGroup.States>
- <VisualState x:Name="Expanded">
- <Storyboard>
- <DoubleAnimation Duration="0" To="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=-1}"
- Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"
- Storyboard.TargetName="TitlePanel"/>
- <DoubleAnimation Duration="0" To="0.0"
- Storyboard.TargetProperty="RotationX"
- Storyboard.TargetName="ViewportProjection"/>
- <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)"
- Storyboard.TargetName="Image">
- <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
- </ObjectAnimationUsingKeyFrames>
- </Storyboard>
- </VisualState>
- <VisualState x:Name="Semiexpanded">
- <Storyboard>
- <DoubleAnimation Duration="0" To="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=-0.45665}"
- Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"
- Storyboard.TargetName="TitlePanel"/>
- </Storyboard>
- </VisualState>
- <VisualState x:Name="Collapsed"/>
- <VisualState x:Name="Flipped">
- <Storyboard>
- <DoubleAnimation Duration="0" To="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=-1}"
- Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"
- Storyboard.TargetName="TitlePanel"/>
- <DoubleAnimation Duration="0" To="180.0"
- Storyboard.TargetProperty="RotationX"
- Storyboard.TargetName="ViewportProjection"/>
- <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)"
- Storyboard.TargetName="Image">
- <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Collapsed"/>
- </ObjectAnimationUsingKeyFrames>
- </Storyboard>
- </VisualState>
- </VisualStateGroup.States>
- </VisualStateGroup>
- </VisualStateManager.VisualStateGroups>
- <Grid x:Name="TitlePanel"
- Height="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=2}"
- Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height}"
- RenderTransformOrigin="0.5,0.5">
- <Grid.RenderTransform>
- <CompositeTransform/>
- </Grid.RenderTransform>
- <Grid.RowDefinitions>
- <RowDefinition/>
- <RowDefinition/>
- </Grid.RowDefinitions>
- <Border Grid.Row="0"
- Background="{TemplateBinding Background}">
- <TextBlock VerticalAlignment="Bottom"
- Margin="10,0,0,6"
- Text="{TemplateBinding Title}"
- FontFamily="{StaticResource PhoneFontFamilyNormal}"
- FontSize="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=0.22}"
- Foreground="{TemplateBinding Foreground}"
- TextWrapping="NoWrap"
- LineStackingStrategy="BlockLineHeight"
- LineHeight="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=0.20}">
- </TextBlock>
- </Border>
- <Grid x:Name="BackPanel"
- Grid.Row="1"
- Height="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height}"
- Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height}"
- Background="{TemplateBinding Background}">
- <Grid.RowDefinitions>
- <RowDefinition Height="*"/>
- <RowDefinition Height="Auto"/>
- </Grid.RowDefinitions>
- <Grid.Projection>
- <PlaneProjection CenterOfRotationY="0.5" RotationX="180"/>
- </Grid.Projection>
- <TextBlock x:Name="NotificationBlock" Grid.Row="0"
- Margin="8,8,0,6"
- Text="{TemplateBinding Notification}"
- FontFamily="{StaticResource PhoneFontFamilyNormal}"
- FontSize="{StaticResource PhoneFontSizeLarge}"
- Foreground="{TemplateBinding Foreground}"
- TextWrapping="NoWrap"
- LineStackingStrategy="BlockLineHeight"
- LineHeight="32"/>
- <TextBlock x:Name="MessageBlock" Grid.Row="0"
- Margin="10,10,10,6"
- Text="{TemplateBinding Message}"
- FontFamily="{StaticResource PhoneFontFamilyNormal}"
- FontSize="{StaticResource PhoneFontSizeNormal}"
- Foreground="{TemplateBinding Foreground}"
- TextWrapping="Wrap"
- LineStackingStrategy="BlockLineHeight"
- LineHeight="23.333"/>
- <TextBlock x:Name="BackTitleBlock" Grid.Row="1"
- VerticalAlignment="Bottom"
- Margin="10,0,0,6"
- FontFamily="{StaticResource PhoneFontFamilySemiBold}"
- FontSize="{StaticResource PhoneFontSizeNormal}"
- Foreground="{TemplateBinding Foreground}"
- TextWrapping="NoWrap"/>
- </Grid>
- <Image x:Name="Image" Grid.Row="1"
- Height="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height}"
- Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height}"
- Stretch="UniformToFill"
- Source="{TemplateBinding Source}"/>
- </Grid>
- </StackPanel>
- </ControlTemplate>
- </Setter.Value>
- </Setter>
- </Style.Setters>
- </Style></span>
4. 如果要使用一个136*136的tile,这样写个样式就行了
- <span style="font-size:18px;"> <Style x:Key="smallTileStyle" TargetType="toolkit:HubTile" BasedOn="{StaticResource customHubTileStyle}">
- <Setter Property="Height" Value="136" />
- <Setter Property="Width" Value="136" />
- <Setter Property="Background" Value="Purple" />
- </Style></span>

wp7 中 HubTile控件自定义大小。的更多相关文章
- MFC中改变控件的大小和位置
用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置. void MoveWindow(int x,int y,int nWidth,int nHeight ...
- MFC中改变控件的大小和位置(zz)
用CWnd类的函数MoveWindow()或SetWindowPos()能够改变控件的大小和位置. void MoveWindow(int x,int y,int nWidth,int nHeight ...
- onCreate中获得控件的大小
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setC ...
- C# Winform 界面中各控件随着窗口大小变化
在做一项工程中,由于不确定目标平台的分辨率,而正常使用要求铺满整个屏幕,所以界面中的各个控件必须能够适应窗口的变化. 首先想到的就是控件的百分比布局,但是再尝试写了几个控件的Location和Size ...
- 为Form中的控件增加自适应功能 转
创建一个基于Custom的类resizeable,并新建属性和方法程序,其说明如下: a) 新建属性: posiTyperList 可调整位置的控件类型列表sizeTypeList 可调整大小的控件类 ...
- MFC的停靠窗口中插入对话框,在对话框中添加控件并做控件自适应
单文档程序添加了停靠窗口后,可能会在停靠窗口中添加一些控件.在这里我的做法是在对话框上添加控件并布局,然后将这个对话框插入到停靠窗口中. 步骤 1.插入对话框,在对话框中放入控件(我的为树形控件),并 ...
- WinForm编程时窗体设计器中ComboBox控件大小的设置
问题描述: 在VS中的窗体设计器中拖放一个ComboBox控件后想调整控件的大小.发现在控件上用鼠标只能拖动宽度(Width)无法拖动(Height). 解决过程: 1.控件无法拖动,就在属性窗口中设 ...
- Android中动态改变控件的大小的一种方法
在Android中有时候我们需要动态改变控件的大小.有几种办法可以实现 一是在onMeasure中修改尺寸,二是在onLayout中修改位置和尺寸.这个是可以进行位置修改的,onMeasure不行. ...
- WPF中自定义的DataTemplate中的控件,在Window_Loaded事件中加载机制初探
原文:WPF中自定义的DataTemplate中的控件,在Window_Loaded事件中加载机制初探 最近因为项目需要,开始学习如何使用WPF开发桌面程序.使用WPF一段时间之后,感 ...
随机推荐
- django 架构点点滴滴
前言: 零星发现一些,零星记录一些,因此可能整体比较混乱,因为显然不是一气呵成写的. 关于CBV(Class Based View): 首先吐槽下,cbv的整体继承结构,可真的不是很优美,可以查看这里 ...
- Kruskal vs Borůvka
做了个对比.Borůvka算法对于稠密图效果特别好.这两个都是求生成森林的算法.Prim+heap+tarjan过于难写不写了. V=200,E=1000 Kruskal method 4875048 ...
- php __set() __get() __isset() __unset()四个方法的应用
一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是,对属性的读取 和赋值操作是非常频繁的,因此在PHP5 中,预定义了两个函数“__get()”和“__set()”来获 取和赋值其 ...
- java 异常处理 Throwable Error 和Exception
Java异常类层次结构图: 异常的英文单词是exception,字面翻译就是“意外.例外”的意思,也就是非正常情况.事实上,异常本质上是程序上的错误,包括程序逻辑错误和系统错误. 比如使用 ...
- Couchbase 介绍 - 更好的 Cache 系统
在移动互联网时代,我们面对的是更多的客户端,更低的请求延迟,这当然需要对数据做大量的 Cache 以提高读写速度. 术语 节点:指集群里的一台服务器. 现有 Cache 系统的特点 目前业界使用得最多 ...
- Spring面试题集
一.Spring简介 * Spring框架有哪几部分组成? Spring框架有七个模块组成组成,这7个模块(或组件)均可以单独存在,也可以与其它一个或多个模块联合使用,主要功能表现如下: ...
- static_cast dynamic_cast const_cast reinterpret_cast总结对比
[本文链接] http://www.cnblogs.com/hellogiser/p/static_cast-dynamic_cast-const_cast-reinterpret_cast.html ...
- 2.10 用最少次数寻找数组中的最大值和最小值[find min max of array]
[本文链接] http://www.cnblogs.com/hellogiser/p/find-min-max-of-array.html [题目] 对于一个由N个整数组成的数组,需要比较多少次才能把 ...
- codeforces 374A Inna and Pink Pony 解题报告
题目链接:http://codeforces.com/problemset/problem/374/A 题目意思:给出一个 n 行 m 列 的棋盘,要将放置在坐标点为(i, j)的 candy 移动 ...
- 给mysql数据库插入当前时间
mysql相关的三个函数有: NOW()函数以`'YYYY-MM-DD HH:MM:SS'返回当前的日期时间,可以直接存到DATETIME字段中.CURDATE()以’YYYY-MM-DD’的格式返回 ...