How to Programmatically Switch between the HubTile Visual States
In this post I am going to talk about how to programmatically switch between different HubTile Visual States. Since the HubTile does not expose any API for changing / switching between its visual states manually it is not obvious how you can do that. However, the solution is pretty simple: you just need to use the VisualStateManager class which manages states and the logic for transitioning between states of controls.
For reference take a look at the official MSDN Documentation.
To begin with, lets first create a new Windows Phone application project and add a reference toMicrosoft.Phone.Controls.Toolkit.dll.
NOTE: For more information about the HubTile control take a look at:
- "Silverlight for Windows Phone Toolkit In Depth" FREE e-book
- Windows Phone HubTile in depth| Part1: key concepts and API
Step1. Add the following code in MainPage.xaml:
|
1
2
3
4
|
<phone:PhoneApplicationPage x:Class="HubTileDemo.MainPage" ... xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"> |
|
1
2
3
4
5
6
7
8
|
<StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0" Orientation="Vertical"> <toolkit:HubTile x:Name="hubTile" Background="Green" Source="wpglogo.png" Title="Hold Here" Message="This is HubTile message!" Margin="10"/> <Button x:Name="btnGoToExpanded" Content=" Go To Expanded State" Click="btnGoToExpanded_Click" /> <Button x:Name="btnGoToSemiexpanded" Content="Go To Semiexpanded State" Click="btnGoToSemiexpanded_Click" /> <Button x:Name="btnGoToFlipped" Content="Go To Flipped State" Click="btnGoToFlipped_Click" /> <Button x:Name="btnGoToCollapsed" Content="Go To Collapsed State" Click="btnGoToCollapsed_Click" /></StackPanel> |
Step2. Set the HubTile "IsFrozen" property to true in order to prevent the HubTile Visual State from being changed automatically. Add the following code in MainPage.xaml.cs:
|
1
2
3
4
5
6
|
public MainPage(){ InitializeComponent(); this.hubTile.IsFrozen = true;} |
Step3. Go To Expanded State implementation:
|
1
2
3
4
|
private void btnGoToExpanded_Click(object sender, RoutedEventArgs e){ VisualStateManager.GoToState(this.hubTile, "Expanded", true);} |
![]()
Step4. Go To Semiexpanded State implementation:
|
1
2
3
4
|
private void btnGoToSemiexpanded_Click(object sender, RoutedEventArgs e){ VisualStateManager.GoToState(this.hubTile, "Semiexpanded", true);} |
![]()
Step5. Go To Flipped State implementation:
|
1
2
3
4
|
private void btnGoToFlipped_Click(object sender, RoutedEventArgs e){ VisualStateManager.GoToState(this.hubTile, "Flipped", true);} |
![]()
Step6. Go To Collapsed State implementation:
|
1
2
3
4
|
private void btnGoToCollapsed_Click(object sender, RoutedEventArgs e){ VisualStateManager.GoToState(this.hubTile, "Collapsed", true);} |
![]()
That was all about programmatically switching between the different HubTile Visual States. The source code is available here:
I hope that the article was helpful.
You may also find interesting the following articles:
- "Silverlight for Windows Phone Toolkit In Depth" FREE e-book
- Working with the Windows Phone HubTile Events
- Windows Phone HubTile in depth| Part1: key concepts and API
- Windows Phone HubTile in depth| Part2: Data Binding
- Windows Phone HubTile in depth| Part3: Freezing and Unfreezing tiles
You can also follow us on Twitter: @winphonegeekfor Windows Phone; @winrtgeekfor Windows 8 / WinRT
Comments
Thanks again
posted by: Steven on 10/15/2011 6:18:40 PM
Thanks again! Very useful for me!
How to Switch on dynamically created HubTiles?
posted by: MSiccDev on 1/30/2012 1:24:46 PM
This works fine with a single HubTile.
But how can I do this if I add my HubTiles as DataTemplate to a ListBox?
The VisualStateManager does not recognize the HubTile as control, and returns alwas null.
Anyone an idea?
Programatically adding and animating
posted by: Nate Radebaugh on 12/21/2012 8:51:14 PM
If you are going to be controlling the states of a HubTile you have programatically added, you must do it after the HubTile is loaded. For instance:
HubTile tile = new HubTile();
tile.Title = "Title";
tile.Message = "Message";
tile.Loaded += tile_Loaded;
And then have the event handler perform the settings: (for example)
void tile_Loaded(object sender, RoutedEventArgs e)
{
HubTile tile = (HubTile)sender;
string setState = "Semiexpanded";
// set the tile's state
VisualStateManager.GoToState(tile, setState, true);
tile.IsFrozen = true;
}
Hope this helps someone else, took me a while to figure out where I was going wrong since the VisualStateManager.GoToState() does nothing and returns false if it doesn't know the state you send it, which it never knows before the HubTile is Loaded.
How to Programmatically Switch between the HubTile Visual States的更多相关文章
- 零元学Expression Blend 4 - Chapter 33 简单轻松的学会如何使用Visual States(下)
原文:零元学Expression Blend 4 - Chapter 33 简单轻松的学会如何使用Visual States(下) 上篇提到了Visual State Manager中文翻译为视觉状态 ...
- 零元学Expression Blend 4 - Chapter 32 简单轻松的学会如何使用Visual States(上)
原文:零元学Expression Blend 4 - Chapter 32 简单轻松的学会如何使用Visual States(上) Visual State Manager中文翻译为视觉状态管理器,这 ...
- Visual Studio创建跨平台移动应用_02.Cordova Extension
1简介 本章节是关于Visual Studio Tools for Apache Cordova的,目前此产品只发布了预览版.Visual Studio for Apache Cordova帮助熟悉V ...
- 使用 Cordova+Visual Studio 创建跨平台移动应用(1)
1简介 本章节是关于Visual Studio Tools for Apache Cordova的,目前此产品只发布了预览版.Visual Studio for Apache Cordova帮助熟悉V ...
- 论文笔记:Visual Semantic Navigation Using Scene Priors
Visual Semantic Navigation Using Scene Priors 2018-10-21 19:39:26 Paper: https://arxiv.org/pdf/1810 ...
- Expression Blend实例中文教程(11) - 视觉管理器快速入门Visual State Manager(VSM)
Visual State Manager,中文又称视觉状态管理器(简称为VSM),是Silverlight 2中引进的一个概念.通过使用VSM,开发人员和设计人员可以轻松的改变项目控件的视觉效果,在项 ...
- Expression Blend实例中文教程(11) - 视觉管理器快速入门Visual State Manager(VSM)
Expression Blend实例中文教程(11) - 视觉管理器快速入门Visual State Manager(V 时间:2010-04-12 16:06来源:SilverlightChina. ...
- Chapter 20: Diagnostics
WHAT'S IN THIS CHAPTER?n Code contractsn Tracingn Event loggingn Performance monitoringWROX.COM CODE ...
- UWP VirtualizedVariableSizedGridView 支持可虚拟化可变大小Item的View(二)
上篇UWP VirtualizedVariableSizedGridView 支持可虚拟化可变大小Item的View(一) 讲到该控件的需要和设计过程. 这篇讲讲开发过程中一些重要问题解决. 1.支持 ...
随机推荐
- DICOM:DICOM3.0网络通信协议(续)
转载:http://blog.csdn.net/zssureqh/article/details/44278693 题记: 近一年来一直坚持周末写博客,整理工作和闲暇之余的点点滴滴.对于新知识点.新技 ...
- 2模02day1题解
源文件在我的网盘上.链接:http://pan.baidu.com/s/1qWPUDRm 密码:k52e (只有机智的人才能看到我的链接) 机智的双重下划线~~~ T1 T1就是一个递推,这题目把我恶 ...
- squid日志配置与轮询
squid日志分类及参数 SQUID默认的log文件非常多,其中最重要的LOG日志有三个,分别为access.log.store.log.cache.log.三个日志的记录的内容如下: access. ...
- 【OpenStack】OpenStack系列2之KeyStone详解
源码下载.依赖安装 参考:http://www.oschina.net/question/565065_66271 https://github.com/yongluo2013/osf-opensta ...
- 【SpringMVC】SpringMVC系列9之Model数据返回到View
9.Model数据返回到View 9.1.概述 Spring MVC 提供了以下几种途径输出模型数据: ModelAndView: 处理方法返回值类型为 ModelAndView 时, 方法体 ...
- 【SpringMVC】SpringMVC系列7之POJO 对象绑定请求参数值
7.POJO 对象绑定请求参数值 7.1.概述 Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值.而且支持级联属性.如:dept.deptId.dept ...
- Selenium webdriver 学习总结-元素定位
Selenium webdriver 学习总结-元素定位 webdriver提供了丰富的API,有多种定位策略:id,name,css选择器,xpath等,其中css选择器定位元素效率相比xpath要 ...
- libavcodec/dxva2.h:40:5: error: unknown type name 'IDirectXVideoDecoder'
gcc 4.9.2 编译 ffmpeg-git-1aeb88b 是出现如下错误 > FFmpeg fails to make with: > > CC libavcodec/dxva ...
- IE的安全性设定增加“我的电脑”的安全性设定
HKEY_CURRE-NT_USER\Software\Microsoft\Windows\CurrentVersion\InternetSettings\Zones\,在右边窗口中找到DWORD值“ ...
- android 输入法出现挤压屏幕、android输入键盘覆盖了屏幕控件的解决办法
如果希望输入法键盘弹出时不自动向上挤压activity,在Manifest清单文件中对应的activty中设置属性android:windowSoftInputMode="adjustPan ...