Windows Phone 创建HubTile元素并重写其样式

       在最新的Windows Phone Toolkit中我们可以看到HubTile控件,这个控件可以允许我们添加生动的动态磁贴,其中可以包含图像,标题,信息,以及提示通知!并且也可以利用它的GroupTag属性进行分组!

 

       接下来我们来演示HubTile控件的使用方法,这里需要注意的是HubTile控件遵循的是Metro UI的设计风格,它的默认大小为173*173.

如下:

   可以看出,通过HubTile控件,我们很方便的可以做出像桌面一样的动态磁贴元素!

 

        那么我们该如何使用HubTile呢?在使用之前,我们需要去http://silverlight.codeplex.com/下载最新的Windows Phone Toolkit DLL并添加到我们的项目引用中!之后我们便可以进行如下操作:

 

 

一、XAML中添加命名空间:

  

1 xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
View Code

 

二、在我们Xaml中编写HubTile代码

 

 1 <Grid Width="370" Height="537">
 2 
 3 
 4                 <Grid.RowDefinitions>
 5 
 6 
 7                     <RowDefinition Height="173*"/>
 8 
 9 
10                     <RowDefinition Height="173*"/>
11 
12 
13                     <RowDefinition Height="173*"/>
14 
15 
16                 </Grid.RowDefinitions>
17 
18 
19                 <Grid.ColumnDefinitions>
20 
21 
22                     <ColumnDefinition Width="173*"/>
23 
24 
25                     <ColumnDefinition Width="173*"/>
26 
27 
28                 </Grid.ColumnDefinitions>
29 
30 
31                 <StackPanel>
32 
33 
34                     <toolkit:HubTile x:Name="btnPost1"  Source="/Img/1.png"  Title="房产领域" Message="关注黄金地段把握房产动向" />
35 
36 
37                 </StackPanel>
38 
39 
40                 <StackPanel Grid.Column="1" Grid.Row="0">
41 
42 
43                     <toolkit:HubTile x:Name="btnPost2"  Source="/Img/2.png" Title="汽车领域" Message="爱车*就来这里" />
44 
45 
46                 </StackPanel>
47 
48 
49                 <StackPanel Grid.Column="0" Grid.Row="2">
50 
51 
52                     <toolkit:HubTile x:Name="btnPost3"  Source="/Img/4.png" Title="婚庆领域" Message="秀秀我们的恩爱" />
53 
54 
55                 </StackPanel>
56 
57 
58                 <StackPanel Grid.Column="1" Grid.Row="2">
59 
60 
61                     <toolkit:HubTile x:Name="btnPost4"  Source="/Img/5.png" Title="金融领域" Message="随时随地掌握金融动向"  />
62 
63 
64                 </StackPanel>
65 
66 
67                 <StackPanel Grid.ColumnSpan="2" Grid.Row="1">
68 
69 
70                     <toolkit:HubTile x:Name="btnPost5"  Source="/Img/3.png" Title="专属定制" Message="定制属于自己公司的APP" Style="{StaticResource HubTileStyle1}" Width="358" />
71 
72 
73                 </StackPanel>
74 
75 
76             </Grid>
View Code

  在HubTile属性中有几个属性是我们需要了解的:

 

  l  Title:设置或获取HubTile实例的标题

 

  l  Message:设置或获取HubTile实例的信息,用小字体展示

 

  l  Source:ImageSource类型,设置或获取HubTile实例的图片源

 

  l  DisplayNotification:布尔值,它确定新提示的布尔标识

 

  l  Notification:设置或获取提示的内容,用大字体展示

 

  l  IsFrozen:布尔值,设置或获取那些没有处于Animated的图像的布尔标识

 

  l  GroupTag:设置或获取HubTile组的group tag。当你添加了多个HubTile,这时你可以把它们归为一组

 

    可以看出、我在上面的最后一个HubTile中设置了Style属性。因为传统的HubTile大小是173*173的,即使改变的Width属性也不能改变HubTile元素的大小,所以我们要利用Blend来重写该HubTile的样式! 修改后的HubTile的样式如下:

  1 <phone:PhoneApplicationPage.Resources>
  2 
  3 
  4 
  5         <Style x:Key="HubTileStyle1" TargetType="toolkit:HubTile">
  6 
  7 
  8 
  9             <Setter Property="Height" Value="173"/>
 10 
 11 
 12 
 13             <Setter Property="Width" Value="173"/>
 14 
 15 
 16 
 17             <Setter Property="Background" Value="{StaticResource PhoneAccentBrush}"/>
 18 
 19 
 20 
 21             <Setter Property="Foreground" Value="#FFFFFFFF"/>
 22 
 23 
 24 
 25             <Setter Property="Template">
 26 
 27 
 28 
 29                 <Setter.Value>
 30 
 31 
 32 
 33                     <ControlTemplate TargetType="toolkit:HubTile">
 34 
 35 
 36 
 37                         <StackPanel x:Name="Viewport" Height="173" Width="358">
 38 
 39 
 40 
 41                             <StackPanel.Resources>
 42 
 43 
 44 
 45                                 <CubicEase x:Key="HubTileEaseOut" EasingMode="EaseOut"/>
 46 
 47 
 48 
 49                             </StackPanel.Resources>
 50 
 51 
 52 
 53                             <StackPanel.Projection>
 54 
 55 
 56 
 57                                 <PlaneProjection x:Name="ViewportProjection" CenterOfRotationY="0.25"/>
 58 
 59 
 60 
 61                             </StackPanel.Projection>
 62 
 63 
 64 
 65                             <VisualStateManager.VisualStateGroups>
 66 
 67 
 68 
 69                                 <VisualStateGroup x:Name="ImageStates">
 70 
 71 
 72 
 73                                     <VisualStateGroup.Transitions>
 74 
 75 
 76 
 77                                         <VisualTransition x:Name="ExpandedToSemiexpanded" From="Expanded" GeneratedDuration="0:0:0.85" To="Semiexpanded">
 78 
 79 
 80 
 81                                             <Storyboard>
 82 
 83 
 84 
 85                                                 <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="TitlePanel">
 86 
 87 
 88 
 89                                                     <EasingDoubleKeyFrame EasingFunction="{StaticResource HubTileEaseOut}" KeyTime="0:0:0.0" Value="-173.0"/>
 90 
 91 
 92 
 93                                                     <EasingDoubleKeyFrame EasingFunction="{StaticResource HubTileEaseOut}" KeyTime="0:0:0.85" Value="-79.0"/>
 94 
 95 
 96 
 97                                                 </DoubleAnimationUsingKeyFrames>
 98 
 99 
100 
101                                                 <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="RotationX" Storyboard.TargetName="ViewportProjection">
102 
103 
104 
105                                                     <EasingDoubleKeyFrame EasingFunction="{StaticResource HubTileEaseOut}" KeyTime="0:0:0.0" Value="0.0"/>
106 
107 
108 
109                                                 </DoubleAnimationUsingKeyFrames>
110 
111 
112 
113                                             </Storyboard>
114 
115 
116 
117                                         </VisualTransition>
118 
119 
120 
121                                         <VisualTransition x:Name="SemiexpandedToCollapsed" From="Semiexpanded" GeneratedDuration="0:0:0.85" To="Collapsed">
122 
123 
124 
125                                             <Storyboard>
126 
127 
128 
129                                                 <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="TitlePanel">
130 
131 
132 
133                                                     <EasingDoubleKeyFrame EasingFunction="{StaticResource HubTileEaseOut}" KeyTime="0:0:0.0" Value="-79.0"/>
134 
135 
136 
137                                                     <EasingDoubleKeyFrame EasingFunction="{StaticResource HubTileEaseOut}" KeyTime="0:0:0.85" Value="0.0"/>
138 
139 
140 
141                                                 </DoubleAnimationUsingKeyFrames>
142 
143 
144 
145                                             </Storyboard>
146 
147 
148 
149                                         </VisualTransition>
150 
151 
152 
153                                         <VisualTransition x:Name="CollapsedToExpanded" From="Collapsed" GeneratedDuration="0:0:0.85" To="Expanded">
154 
155 
156 
157                                             <Storyboard>
158 
159 
160 
161                                                 <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="TitlePanel">
162 
163 
164 
165                                                     <EasingDoubleKeyFrame EasingFunction="{StaticResource HubTileEaseOut}" KeyTime="0:0:0.0" Value="0.0"/>
166 
167 
168 
169                                                     <EasingDoubleKeyFrame EasingFunction="{StaticResource HubTileEaseOut}" KeyTime="0:0:0.85" Value="-173.0"/>
170 
171 
172 
173                                                 </DoubleAnimationUsingKeyFrames>
174 
175 
176 
177                                             </Storyboard>
178 
179 
180 
181                                         </VisualTransition>
182 
183 
184 
185                                         <VisualTransition x:Name="ExpandedToFlipped" From="Expanded" GeneratedDuration="0:0:0.85" To="Flipped">
186 
187 
188 
189                                             <Storyboard>
190 
191 
192 
193                                                 <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="TitlePanel">
194 
195 
196 
197                                                     <EasingDoubleKeyFrame EasingFunction="{StaticResource HubTileEaseOut}" KeyTime="0:0:0.0" Value="-173.0"/>
198 
199 
200 
201                                                 </DoubleAnimationUsingKeyFrames>
202 
203 
204 
205                                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Image">
206 
207 
208 
209                                                     <DiscreteObjectKeyFrame KeyTime="0:0:0.185" Value="Collapsed"/>
210 
211 
212 
213                                                 </ObjectAnimationUsingKeyFrames>
214 
215 
216 
217                                                 <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="RotationX" Storyboard.TargetName="ViewportProjection">
218 
219 
220 
221                                                     <EasingDoubleKeyFrame EasingFunction="{StaticResource HubTileEaseOut}" KeyTime="0:0:0.0" Value="0.0"/>
222 
223 
224 
225                                                     <EasingDoubleKeyFrame EasingFunction="{StaticResource HubTileEaseOut}" KeyTime="0:0:0.85" Value="180.0"/>
226 
227 
228 
229                                                 </DoubleAnimationUsingKeyFrames>
230 
231 
232 
233                                             </Storyboard>
234 
235 
236 
237                                         </VisualTransition>
238 
239 
240 
241                                         <VisualTransition x:Name="FlippedToExpanded" From="Flipped" GeneratedDuration="0:0:0.85" To="Expanded">
242 
243 
244 
245                                             <Storyboard>
246 
247 
248 
249                                                 <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="TitlePanel">
250 
251 
252 
253                                                     <EasingDoubleKeyFrame EasingFunction="{StaticResource HubTileEaseOut}" KeyTime="0:0:0.0" Value="-173.0"/>
254 
255 
256 
257                                                 </DoubleAnimationUsingKeyFrames>
258 
259 
260 
261                                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Image">
262 
263 
264 
265                                                     <DiscreteObjectKeyFrame KeyTime="0:0:0.185" Value="Visible"/>
266 
267 
268 
269                                                 </ObjectAnimationUsingKeyFrames>
270 
271 
272 
273                                                 <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="RotationX" Storyboard.TargetName="ViewportProjection">
274 
275 
276 
277                                                     <EasingDoubleKeyFrame EasingFunction="{StaticResource HubTileEaseOut}" KeyTime="0:0:0.0" Value="180.0"/>
278 
279 
280 
281                                                     <EasingDoubleKeyFrame EasingFunction="{StaticResource HubTileEaseOut}" KeyTime="0:0:0.85" Value="360.0"/>
282 
283 
284 
285                                                 </DoubleAnimationUsingKeyFrames>
286 
287 
288 
289                                             </Storyboard>
290 
291 
292 
293                                         </VisualTransition>
294 
295 
296 
297                                     </VisualStateGroup.Transitions>
298 
299 
300 
301                                     <VisualState x:Name="Expanded">
302 
303 
304 
305                                         <Storyboard>
306 
307 
308 
309                                             <DoubleAnimation Duration="0" To="-173.0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="TitlePanel"/>
310 
311 
312 
313                                             <DoubleAnimation Duration="0" To="0.0" Storyboard.TargetProperty="RotationX" Storyboard.TargetName="ViewportProjection"/>
314 
315 
316 
317                                             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Image">
318 
319 
320 
321                                                 <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
322 
323 
324 
325                                             </ObjectAnimationUsingKeyFrames>
326 
327 
328 
329                                         </Storyboard>
330 
331 
332 
333                                     </VisualState>
334 
335 
336 
337                                     <VisualState x:Name="Semiexpanded">
338 
339 
340 
341                                         <Storyboard>
342 
343 
344 
345                                             <DoubleAnimation Duration="0" To="-79.0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="TitlePanel"/>
346 
347 
348 
349                                         </Storyboard>
350 
351 
352 
353                                     </VisualState>
354 
355 
356 
357                                     <VisualState x:Name="Collapsed"/>
358 
359 
360 
361                                     <VisualState x:Name="Flipped">
362 
363 
364 
365                                         <Storyboard>
366 
367 
368 
369                                             <DoubleAnimation Duration="0" To="-173.0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="TitlePanel"/>
370 
371 
372 
373                                             <DoubleAnimation Duration="0" To="180.0" Storyboard.TargetProperty="RotationX" Storyboard.TargetName="ViewportProjection"/>
374 
375 
376 
377                                             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Image">
378 
379 
380 
381                                                 <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Collapsed"/>
382 
383 
384 
385                                             </ObjectAnimationUsingKeyFrames>
386 
387 
388 
389                                         </Storyboard>
390 
391 
392 
393                                     </VisualState>
394 
395 
396 
397                                 </VisualStateGroup>
398 
399 
400 
401                             </VisualStateManager.VisualStateGroups>
402 
403 
404 
405                             <Grid x:Name="TitlePanel" Height="346" RenderTransformOrigin="0.5,0.5" Width="358">
406 
407 
408 
409                                 <Grid.RowDefinitions>
410 
411 
412 
413                                     <RowDefinition/>
414 
415 
416 
417                                     <RowDefinition/>
418 
419 
420 
421                                 </Grid.RowDefinitions>
422 
423 
424 
425                                 <Grid.RenderTransform>
426 
427 
428 
429                                     <CompositeTransform/>
430 
431 
432 
433                                 </Grid.RenderTransform>
434 
435 
436 
437                                 <Border Background="{TemplateBinding Background}" Grid.Row="0">
438 
439 
440 
441                                     <TextBlock Foreground="{TemplateBinding Foreground}" FontSize="41" FontFamily="{StaticResource PhoneFontFamilyNormal}" LineStackingStrategy="BlockLineHeight" LineHeight="39" Margin="10,0,0,6" TextWrapping="NoWrap" Text="{TemplateBinding Title}" VerticalAlignment="Bottom"/>
442 
443 
444 
445                                 </Border>
446 
447 
448 
449                                 <Grid x:Name="BackPanel" Background="{TemplateBinding Background}" Height="173" Grid.Row="1" Width="358">
450 
451 
452 
453                                     <Grid.Projection>
454 
455 
456 
457                                         <PlaneProjection CenterOfRotationY="0.5" RotationX="180"/>
458 
459 
460 
461                                     </Grid.Projection>
462 
463 
464 
465                                     <Grid.RowDefinitions>
466 
467 
468 
469                                         <RowDefinition Height="*"/>
470 
471 
472 
473                                         <RowDefinition Height="Auto"/>
474 
475 
476 
477                                     </Grid.RowDefinitions>
478 
479 
480 
481                                     <TextBlock x:Name="NotificationBlock" Foreground="{TemplateBinding Foreground}" FontSize="{StaticResource PhoneFontSizeLarge}" FontFamily="{StaticResource PhoneFontFamilyNormal}" LineStackingStrategy="BlockLineHeight" LineHeight="32" Margin="8,8,0,6" Grid.Row="0" TextWrapping="NoWrap" Text="{TemplateBinding Notification}"/>
482 
483 
484 
485                                     <TextBlock x:Name="MessageBlock" Foreground="{TemplateBinding Foreground}" FontSize="{StaticResource PhoneFontSizeNormal}" FontFamily="{StaticResource PhoneFontFamilyNormal}" LineStackingStrategy="BlockLineHeight" LineHeight="23.333" Margin="10,10,10,6" Grid.Row="0" TextWrapping="Wrap" Text="{TemplateBinding Message}"/>
486 
487 
488 
489                                     <TextBlock x:Name="BackTitleBlock" Foreground="{TemplateBinding Foreground}" FontSize="{StaticResource PhoneFontSizeNormal}" FontFamily="{StaticResource PhoneFontFamilySemiBold}" Margin="10,0,0,6" Grid.Row="1" TextWrapping="NoWrap" VerticalAlignment="Bottom"/>
490 
491 
492 
493                                 </Grid>
494 
495 
496 
497                                 <Image x:Name="Image" Height="173" Grid.Row="1" Source="{TemplateBinding Source}" Stretch="UniformToFill" Width="358"/>
498 
499 
500 
501                             </Grid>
502 
503 
504 
505                         </StackPanel>
506 
507 
508 
509                     </ControlTemplate>
510 
511 
512 
513                 </Setter.Value>
514 
515 
516 
517             </Setter>
518 
519 
520 
521         </Style>
522 
523 
524 
525     </phone:PhoneApplicationPage.Resources>
View Code

 

当我们引用了上面的样式之后我们预览下我们的整体效果如下,当然实际中这些小磁贴是会动的:

                

posted @ 2013-06-04 15:32  然后、没所以  阅读(230)  评论(0编辑  收藏  举报