zoukankan      html  css  js  c++  java
  • 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;

    [csharp] view plaincopy
     
    1. <span style="font-size:18px;">    public class DoubleScaleConverner : IValueConverter  
    2.     {  
    3.         public object Convert(object value, Type targetType, object parameter, CultureInfo culture)  
    4.         {  
    5.             if (value is double && targetType == typeof(double))  
    6.             {  
    7.                 double dbOrig = (double)value;  
    8.                 if (parameter is string)  
    9.                 {  
    10.                     double dbParam;  
    11.                     if (double.TryParse((parameter as string), out dbParam))  
    12.                     {  
    13.                         return Math.Round(dbOrig * dbParam);  
    14.                     }  
    15.                 }  
    16.             }  
    17.   
    18.             return value;  
    19.         }  
    20.   
    21.         public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)  
    22.         {  
    23.             return null;  
    24.         }  
    25.     }</span>  

    2. ResourceDictionary文件中,将converner声明出来

    [html] view plaincopy
     
    1. <span style="font-size:18px;">xmlns:my="clr-namespace:HubTileTest"  
    2. an>  
    [html] view plaincopy
     
    1. <span style="font-size:18px;">    <my:DoubleScaleConverner x:Key="doubleScaleConverner" /></span>  

    3. 用blend生成hubtile的style,并做修改成这样

    [html] view plaincopy
     
    1. <span style="font-size:18px;"><Style x:Key="customHubTileStyle" TargetType="toolkit:HubTile">  
    2.     <Style.Setters>  
    3.         <Setter Property="Height" Value="173"/>  
    4.         <Setter Property="Width" Value="173"/>  
    5.         <Setter Property="Background" Value="{StaticResource PhoneAccentBrush}"/>  
    6.         <Setter Property="Foreground" Value="#FFFFFFFF"/>  
    7.         <Setter Property="Template">  
    8.             <Setter.Value>  
    9.                 <ControlTemplate TargetType="toolkit:HubTile">  
    10.                     <StackPanel x:Name="Viewport"  
    11.                                 Height="{TemplateBinding Height}" Width="{TemplateBinding Width}">  
    12.                         <StackPanel.Resources>  
    13.                             <CubicEase EasingMode="EaseOut" x:Key="HubTileEaseOut"/>  
    14.                         </StackPanel.Resources>  
    15.                         <StackPanel.Projection>  
    16.                             <PlaneProjection CenterOfRotationY="0.25" x:Name="ViewportProjection"/>  
    17.                         </StackPanel.Projection>  
    18.                         <VisualStateManager.VisualStateGroups>  
    19.                             <VisualStateGroup x:Name="ImageStates">  
    20.                                 <VisualStateGroup.Transitions>  
    21.                                     <VisualTransition x:Name="ExpandedToSemiexpanded"   
    22.                                                       From="Expanded" To="Semiexpanded"  
    23.                                                       GeneratedDuration="0:0:0.85">  
    24.                                         <Storyboard>  
    25.                                             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"   
    26.                                                                            Storyboard.TargetName="TitlePanel">  
    27.                                                 <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=-1}" EasingFunction="{StaticResource HubTileEaseOut}"/>  
    28.                                                 <EasingDoubleKeyFrame KeyTime="0:0:0.85" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=-0.45665}" EasingFunction="{StaticResource HubTileEaseOut}"/>  
    29.                                             </DoubleAnimationUsingKeyFrames>  
    30.                                             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="RotationX"   
    31.                                                                            Storyboard.TargetName="ViewportProjection">  
    32.                                                 <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="0.0" EasingFunction="{StaticResource HubTileEaseOut}"/>  
    33.                                             </DoubleAnimationUsingKeyFrames>  
    34.                                         </Storyboard>  
    35.                                     </VisualTransition>  
    36.                                     <VisualTransition x:Name="SemiexpandedToCollapsed"   
    37.                                                       From="Semiexpanded" To="Collapsed"  
    38.                                                       GeneratedDuration="0:0:0.85">  
    39.                                         <Storyboard>  
    40.                                             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"   
    41.                                                                            Storyboard.TargetName="TitlePanel">  
    42.                                                 <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=-0.45665}" EasingFunction="{StaticResource HubTileEaseOut}"/>  
    43.                                                 <EasingDoubleKeyFrame KeyTime="0:0:0.85" Value="0.0" EasingFunction="{StaticResource HubTileEaseOut}"/>  
    44.                                             </DoubleAnimationUsingKeyFrames>  
    45.                                         </Storyboard>  
    46.                                     </VisualTransition>  
    47.                                     <VisualTransition x:Name="CollapsedToExpanded"   
    48.                                                       From="Collapsed" To="Expanded"  
    49.                                                       GeneratedDuration="0:0:0.85">  
    50.                                         <Storyboard>  
    51.                                             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"   
    52.                                                                            Storyboard.TargetName="TitlePanel">  
    53.                                                 <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="0.0" EasingFunction="{StaticResource HubTileEaseOut}"/>  
    54.                                                 <EasingDoubleKeyFrame KeyTime="0:0:0.85" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=-1}" EasingFunction="{StaticResource HubTileEaseOut}"/>  
    55.                                             </DoubleAnimationUsingKeyFrames>  
    56.                                         </Storyboard>  
    57.                                     </VisualTransition>  
    58.                                     <VisualTransition x:Name="ExpandedToFlipped"   
    59.                                                       From="Expanded" To="Flipped"  
    60.                                                       GeneratedDuration="0:0:0.85">  
    61.                                         <Storyboard>  
    62.                                             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"   
    63.                                                                            Storyboard.TargetName="TitlePanel">  
    64.                                                 <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=-1}" EasingFunction="{StaticResource HubTileEaseOut}"/>  
    65.                                             </DoubleAnimationUsingKeyFrames>  
    66.                                             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)"  
    67.                                                                            Storyboard.TargetName="Image">  
    68.                                                 <DiscreteObjectKeyFrame KeyTime="0:0:0.185" Value="Collapsed"/>  
    69.                                             </ObjectAnimationUsingKeyFrames>  
    70.                                             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="RotationX"   
    71.                                                                            Storyboard.TargetName="ViewportProjection">  
    72.                                                 <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="0.0" EasingFunction="{StaticResource HubTileEaseOut}"/>  
    73.                                                 <EasingDoubleKeyFrame KeyTime="0:0:0.85" Value="180.0" EasingFunction="{StaticResource HubTileEaseOut}"/>  
    74.                                             </DoubleAnimationUsingKeyFrames>  
    75.                                         </Storyboard>  
    76.                                     </VisualTransition>  
    77.                                     <VisualTransition x:Name="FlippedToExpanded"   
    78.                                                       From="Flipped" To="Expanded"  
    79.                                                       GeneratedDuration="0:0:0.85">  
    80.                                         <Storyboard>  
    81.                                             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"   
    82.                                                                            Storyboard.TargetName="TitlePanel">  
    83.                                                 <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=-1}" EasingFunction="{StaticResource HubTileEaseOut}"/>  
    84.                                             </DoubleAnimationUsingKeyFrames>  
    85.                                             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)"  
    86.                                                                            Storyboard.TargetName="Image">  
    87.                                                 <DiscreteObjectKeyFrame KeyTime="0:0:0.185" Value="Visible"/>  
    88.                                             </ObjectAnimationUsingKeyFrames>  
    89.                                             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="RotationX"   
    90.                                                                            Storyboard.TargetName="ViewportProjection">  
    91.                                                 <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="180.0" EasingFunction="{StaticResource HubTileEaseOut}"/>  
    92.                                                 <EasingDoubleKeyFrame KeyTime="0:0:0.85" Value="360.0" EasingFunction="{StaticResource HubTileEaseOut}"/>  
    93.                                             </DoubleAnimationUsingKeyFrames>  
    94.                                         </Storyboard>  
    95.                                     </VisualTransition>  
    96.                                 </VisualStateGroup.Transitions>  
    97.                                 <VisualStateGroup.States>  
    98.                                     <VisualState x:Name="Expanded">  
    99.                                         <Storyboard>  
    100.                                             <DoubleAnimation Duration="0" To="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=-1}"   
    101.                                                              Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"   
    102.                                                              Storyboard.TargetName="TitlePanel"/>  
    103.                                             <DoubleAnimation Duration="0" To="0.0"   
    104.                                                              Storyboard.TargetProperty="RotationX"   
    105.                                                              Storyboard.TargetName="ViewportProjection"/>  
    106.                                             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)"  
    107.                                                                            Storyboard.TargetName="Image">  
    108.                                                 <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>  
    109.                                             </ObjectAnimationUsingKeyFrames>  
    110.                                         </Storyboard>  
    111.                                     </VisualState>  
    112.                                     <VisualState x:Name="Semiexpanded">  
    113.                                         <Storyboard>  
    114.                                             <DoubleAnimation Duration="0" To="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=-0.45665}"   
    115.                                                              Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"   
    116.                                                              Storyboard.TargetName="TitlePanel"/>  
    117.                                         </Storyboard>  
    118.                                     </VisualState>  
    119.                                     <VisualState x:Name="Collapsed"/>  
    120.                                     <VisualState x:Name="Flipped">  
    121.                                         <Storyboard>  
    122.                                             <DoubleAnimation Duration="0" To="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=-1}"   
    123.                                                              Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"   
    124.                                                              Storyboard.TargetName="TitlePanel"/>  
    125.                                             <DoubleAnimation Duration="0" To="180.0"   
    126.                                                              Storyboard.TargetProperty="RotationX"   
    127.                                                              Storyboard.TargetName="ViewportProjection"/>  
    128.                                             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)"  
    129.                                                                            Storyboard.TargetName="Image">  
    130.                                                 <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Collapsed"/>  
    131.                                             </ObjectAnimationUsingKeyFrames>  
    132.                                         </Storyboard>  
    133.                                     </VisualState>  
    134.                                 </VisualStateGroup.States>  
    135.                             </VisualStateGroup>  
    136.                         </VisualStateManager.VisualStateGroups>  
    137.                         <Grid x:Name="TitlePanel"  
    138.                               Height="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=2}"   
    139.                                   Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height}"  
    140.                               RenderTransformOrigin="0.5,0.5">  
    141.                             <Grid.RenderTransform>  
    142.                                 <CompositeTransform/>  
    143.                             </Grid.RenderTransform>  
    144.                             <Grid.RowDefinitions>  
    145.                                 <RowDefinition/>  
    146.                                 <RowDefinition/>  
    147.                             </Grid.RowDefinitions>  
    148.                             <Border Grid.Row="0"                                          
    149.                                     Background="{TemplateBinding Background}">  
    150.                                 <TextBlock VerticalAlignment="Bottom"  
    151.                                            Margin="10,0,0,6"  
    152.                                            Text="{TemplateBinding Title}"  
    153.                                            FontFamily="{StaticResource PhoneFontFamilyNormal}"  
    154.                                            FontSize="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=0.22}"  
    155.                                            Foreground="{TemplateBinding Foreground}"  
    156.                                            TextWrapping="NoWrap"   
    157.                                            LineStackingStrategy="BlockLineHeight"  
    158.                                            LineHeight="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource doubleScaleConverner}, ConverterParameter=0.20}">  
    159.                                 </TextBlock>  
    160.                             </Border>  
    161.                             <Grid x:Name="BackPanel"  
    162.                                   Grid.Row="1"     
    163.                                   Height="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height}"   
    164.                                       Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height}"  
    165.                                   Background="{TemplateBinding Background}">  
    166.                                 <Grid.RowDefinitions>  
    167.                                     <RowDefinition Height="*"/>  
    168.                                     <RowDefinition Height="Auto"/>  
    169.                                 </Grid.RowDefinitions>  
    170.                                 <Grid.Projection>  
    171.                                     <PlaneProjection CenterOfRotationY="0.5" RotationX="180"/>  
    172.                                 </Grid.Projection>  
    173.                                 <TextBlock x:Name="NotificationBlock" Grid.Row="0"  
    174.                                            Margin="8,8,0,6"  
    175.                                            Text="{TemplateBinding Notification}"  
    176.                                            FontFamily="{StaticResource PhoneFontFamilyNormal}"  
    177.                                            FontSize="{StaticResource PhoneFontSizeLarge}"  
    178.                                            Foreground="{TemplateBinding Foreground}"  
    179.                                            TextWrapping="NoWrap"  
    180.                                            LineStackingStrategy="BlockLineHeight"  
    181.                                            LineHeight="32"/>  
    182.                                 <TextBlock x:Name="MessageBlock" Grid.Row="0"  
    183.                                            Margin="10,10,10,6"  
    184.                                            Text="{TemplateBinding Message}"  
    185.                                            FontFamily="{StaticResource PhoneFontFamilyNormal}"  
    186.                                            FontSize="{StaticResource PhoneFontSizeNormal}"  
    187.                                            Foreground="{TemplateBinding Foreground}"  
    188.                                            TextWrapping="Wrap"  
    189.                                            LineStackingStrategy="BlockLineHeight"  
    190.                                            LineHeight="23.333"/>  
    191.                                 <TextBlock x:Name="BackTitleBlock" Grid.Row="1"   
    192.                                            VerticalAlignment="Bottom"   
    193.                                            Margin="10,0,0,6"  
    194.                                            FontFamily="{StaticResource PhoneFontFamilySemiBold}"  
    195.                                            FontSize="{StaticResource PhoneFontSizeNormal}"  
    196.                                            Foreground="{TemplateBinding Foreground}"  
    197.                                            TextWrapping="NoWrap"/>  
    198.                             </Grid>  
    199.                             <Image x:Name="Image" Grid.Row="1"  
    200.                                    Height="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height}"   
    201.                                        Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height}"  
    202.                                    Stretch="UniformToFill"  
    203.                                    Source="{TemplateBinding Source}"/>  
    204.                         </Grid>  
    205.                     </StackPanel>  
    206.                 </ControlTemplate>  
    207.             </Setter.Value>  
    208.         </Setter>  
    209.     </Style.Setters>  
    210. </Style></span>  



    4. 如果要使用一个136*136的tile,这样写个样式就行了

    [html] view plaincopy
     
    1. <span style="font-size:18px;">    <Style x:Key="smallTileStyle" TargetType="toolkit:HubTile" BasedOn="{StaticResource customHubTileStyle}">  
    2.         <Setter Property="Height" Value="136" />  
    3.         <Setter Property="Width" Value="136" />  
    4.         <Setter Property="Background" Value="Purple" />  
    5.     </Style></span>  



  • 相关阅读:
    Uva 12166 Equilibrium Mobile
    2015年7月实习经历以及一些感悟
    让键盘只数字键盘
    保留两位小数且,不四舍五入
    vuex的理解
    点击出现闪烁
    vue 添加样式分几种方法
    数据滞后的坑
    H5防止安卓手机软键盘弹出挤压页面导致变形的方法
    js 为false的几种情况
  • 原文地址:https://www.cnblogs.com/CharlesGrant/p/3639271.html
Copyright © 2011-2022 走看看