设为首页 收藏本站
查看: 989|回复: 0

Windows 8 Metro 学习笔记(二十)--SemanticZoom的使用

[复制链接]

尚未签到

发表于 2015-5-22 09:42:17 | 显示全部楼层 |阅读模式
  SemanticZoom是一种语义缩放控件,可以在两个相关视图之间切换:例如ZoomOutView视图显示标题信息,而ZoomInView视图显示详细信息。
  先来看看它的简单使用,以下示例就是简单地实现开头字母与字母对应单词视图间的切换。
Xaml代码:




            
               
            
            
               
            
上面代码结构非常清晰,两种视图下用ListView和GridView分别显示

  后台.cs代码:
  


private void LoadData()
{
     zoomedIn.ItemsSource = DataHelper.CollectionOfFruits();
     zoomedOut.ItemsSource = DataHelper.CollectionOfFruitHeaders();
}
private void sezo_ViewChangeStarted_1(object sender, SemanticZoomViewChangedEventArgs e)
{
      if (e.IsSourceZoomedInView)
       {
          if (e.SourceItem.Item != null)
          {
             e.DestinationItem.Item = e.SourceItem.Item.ToString()[0];
          }
       }
       else
         {
            if (e.SourceItem.Item != null)
            {
               e.DestinationItem.Item = DataHelper.GetFirstFruitByFirstLetter(e.SourceItem.Item.ToString()[0]);
          }
}
async private void sezo_ViewChangeCompleted_1(object sender, SemanticZoomViewChangedEventArgs e)
{
            if (e.IsSourceZoomedInView)
            {
                MessageDialog mes = new MessageDialog("ZoomOutView!");
                await mes.ShowAsync();
            }
            else {
                MessageDialog mes = new MessageDialog("ZoomInView!");
                await mes.ShowAsync();
            }
        }
  }  上面两个事件是SemanticZoom最常用的两个事件,ViewChangeStarted事件用于处理在视图改变时作出的响应,我们上面的操作是提供视图区域的信息给新的视图;ViewChangeCompleted事件用于处理在视图切换完成后作出的响应,上面e代表的是视图切换之前的对象。
  上面的是一些最基本的使用,当然ListView与GridView也基本可以实现我们的功能,但在项目期间,需求需在SemanticZoom中的视图使用FlipView控件,当直接使用时,却被告知:“无法分配指定的值,应是以下类型ISemanticZoomInformation”,分析原因才知SemanticZoom中视图控件需要继承ISemanticZoomInformation类,FlipView是没有继承的,肿么办?
  只有自己实现一个控件,这个控件继承FlipView和ISemanticZoomInformation,在MSDN上找到一个继承的控件,大家共享一下:
  


public class SeZoFlipView : FlipView, ISemanticZoomInformation
    {
        public SeZoFlipView() { }
        #region ISemanticZoomInformation
        public void CompleteViewChange()
        {
            // do nothing
        }
        public void CompleteViewChangeFrom(SemanticZoomLocation source, SemanticZoomLocation destination)
        {
            // do nothing
        }
        public void CompleteViewChangeTo(SemanticZoomLocation source, SemanticZoomLocation destination)
        {
            // do nothing
        }
        public void InitializeViewChange()
        {
            // do nothing
        }
        public bool IsActiveView
        {
            get;
            set;
        }
        public bool IsZoomedInView
        {
            get;
            set;
        }
        public void MakeVisible(SemanticZoomLocation item)
        {
            if (item != null && item.Item != null)
            {
                this.SelectedItem = item.Item;
            }
        }
        public SemanticZoom SemanticZoomOwner
        {
            get;
            set;
        }
        public void StartViewChangeFrom(SemanticZoomLocation source, SemanticZoomLocation destination)
        {
            if (this.IsZoomedInView)
            {
                source.Item = this.SelectedItem;
                destination.Item = this.SelectedItem.ToString()[0].ToString();
               
            }
        }
        public void StartViewChangeTo(SemanticZoomLocation source, SemanticZoomLocation destination)
        {
            // do nothing
        }
        #endregion ISemanticZoomInformation
    }  这下再引用就ok啦:



            
               
            
            
               
            
  这个控件看似容易,其实自己用一下也是容易的,嘿嘿~
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-69424-1-1.html 上篇帖子: 《快速构建Windows 8风格应用》系列文章汇总 下篇帖子: Windows Phone 8 手机存储卡数据
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表