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一段时间之后,感 ...
随机推荐
- android 自定义Dialog背景透明及显示位置设置
先贴一下显示效果图,仅作参考: 代码如下: 1.自定义Dialog public class SelectDialog extends AlertDialog{ public SelectDialog ...
- PHP 遍历目录
$dir = $_SERVER['DOCUMENT_ROOT'].'/test'; //var_dump($dir);exit; function my_scandir($dir) { $files ...
- js 函数定义三种方式
<p>Js 函数定义的三种方式:</p> <br> <p>方式一:function</p> <script type="te ...
- 28. 字符串的全排列之第2篇[string permutation with repeating chars]
[本文链接] http://www.cnblogs.com/hellogiser/p/string-permutation-with-repeating-chars.html [题目] 输入一个字符串 ...
- php开发网站编码统一问题
一个良好的网站代码整洁,注释适当是最基本的,也是好的习惯,这可以避免以后的非常乱了自己感觉都乱,一旦重构麻烦就大了耗时耗力,其中网站整个体系的编码是最重要的一个方面,为了网站的稳定性建议php程序,H ...
- Java for LeetCode 031 Next Permutation
Next Permutation Total Accepted: 33595 Total Submissions: 134095 Implement next permutation, whi ...
- 以普通用户登录 su root 用vncviewer:xxxxx 会报错!!exit 回到最初环境变的用户 问题解决!!!!
[root@ok IT-DOC]# vncviewer : TigerVNC Viewer - built May :: Copyright (C) - TigerVNC Team and many ...
- 烟大 Contest1024 - 《挑战编程》第一章:入门 Problem C: The Trip(水题)
Problem C: The Trip Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 19 Solved: 3[Submit][Status][Web ...
- jquery+php实现用户输入搜索内容时自动提示
index.html <html> <head> <meta charset=;} #search_auto li a:hover{background:#D8D ...
- hdu 4393 优先队列
用优先队列储存每个人的初始距离和编号,每轮求出最快的人,然后pop掉 一开始想遍历队列的,后来发现队列没办法遍历,汗-_-! 题意,给几个第一秒冲出的距离和以后速度,求每秒后最前面人的编号,求完后最前 ...