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一段时间之后,感 ...
随机推荐
- DCMTK3.6.1(MD支持库)安装说明
转载:http://qimo601.iteye.com/blog/1685135 [前言] 最近,因为需要开发DICOM网管模块,必须使用DCMTK的DcmNet模块.但是DCMTK3.6.0在Dcm ...
- Linux Haproxy 安装和部署
一.Haproxy 安装 下载地址 http://pan.baidu.com/s/1mggViXE cd /usr/local tar xzvf haproxy-.tar.gz cd haproxy- ...
- 2015-2-10 Linux 知识
1.Linux系统中某个可执行文件属于root并且有setid,当一个普通用户mike运行这个程序时,产生的进程的有效用户和实际用户分别是____? A root mike B root rooy C ...
- 用sed删除空行
用sed删除空行 我的代码如下:class Song def initialize(name) @name = name end def tell puts @nam ...
- chrome断点续传功能
刚好找到了一个临时的解决方法,chrome其实已经内部实现了断点续传功能,不过应该还没完善,所以要自己打开.方法:用chrome在地址栏输入chrome://flags用搜索找到resumption( ...
- 【云计算】基于Ansible的自动部署平台化思路
目标: 1.自动化—支持命令行.webui.api调用 2.支持基础命令.脚本.复杂任务编排.满足生产环境各类模块自动化部署需求 3.满足生产环境(开发.测试.线上)性能.可靠性.安全性要求 4.流程 ...
- jlink安装
https://www.segger.com/jlink-software.html?step=1&file=JLink_510p
- Android Studio "diamond operator is not supported" 处理方法
低版本的android编译环境是不支持使用java7语法的,如果使用了,就会产生上述问题,如果你的android环境较新,那么可以使用以下方法: 在build.gradle的android标签下加入以 ...
- 获取Assets目录下的图片并显示
package com.jingle.getlocal; import java.io.InputStream; import android.app.Activity; import android ...
- python实现统计你一共写了多少行代码
程序员要保证一定的代码量就必须勤奋的敲代码,但怎么知道自己一共写了多少代码呢,笔者用python写了个简单的脚本,遍历所有的.java,.cpp,.c文件的行数,但是正如大家所知,java生成了许多代 ...