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

Windows Phone 7 开发探索笔记8——加载XAML文件中的对象

[复制链接]

尚未签到

发表于 2015-5-8 12:34:35 | 显示全部楼层 |阅读模式
  上篇文章介绍了如何在Silverlight for Windows Phone中读取XML文件,本文来看一下如何从XAML文件中读取信息。
  一.准备XAML文件
  有时候我们需要加载一些来自文件,资源中的UI元素,例如保存在XAML文件中的UI元素。首先来准备一个待读取的XAML文件,我们可以通过创建一个文本文件并将其扩展名改为.xaml的方式来创建,但更好的方式是在Visual Studio中创建,方法如下:右击解决方案资源管理器中的项目选择添加新项,选择任意一个扩展名为.xaml的项均可,然后将自动生成的内容清空,添加如下的代码:
  Ellipse.xaml文件中的XAML代码:
  
DSC0000.gif DSC0001.gif 代码


   
        
            
            
        
   
    Rectangle.xaml文件中的XAML代码:
  
代码


   
        
            
            
            
        
   
  我分别创建了两个XAML文件,其中一个是圆形,一个是矩形,设置好它们相应的属性即可,注意要添加相应的xml名称空间(xmlns)。在Visual Studio中创建的好处是可以得到设计器的帮助,看到实时的效果,当然也可以使用Expression Blend来做。最后,要注意把Visual Studio自动创建的Code-Behind文件删掉。
  二.解析XAML文件
  要解析XAML文件中的信息,需要借助于XamlReader类,它为分析XAML和创建相应的Silverlight对象树提供XAML处理器引擎。在Silverlight for Windows Phone中它只包含一个静态的Load方法,此方法用来分析一段格式良好的XAML片段并创建相应的Silverlight对象树,然后返回这个对象树的根。Load方法接受一个string类型的参数,我们可以将XAML文件中的代码直接传给它,不过在实际项目中,通常不会硬编码,所以采用与上篇文章中相同的方法,Application类的GetResourceStream方法,代码如下:

代码

        T LoadXAMLAndGetShape(string url)
        {
            string xaml = string.Empty;
            StreamResourceInfo sri = Application.GetResourceStream(new Uri(url, UriKind.Relative));
            using (StreamReader sr = new StreamReader(sri.Stream))
            {
                xaml = sr.ReadToEnd();
            }
            T shape = (T)XamlReader.Load(xaml);
            return shape;
        }  这里我创建了一个泛型方法,以便返回不同类型的对象。在方法中,通过Application.GetResourceStream方法加载XAML文件,然后用StreamReader将它读成字符串,最后将字符串传入XamlReader的Load方法来构造相应的类型。
  三.使用读取到的Silverlight对象
    读取到相应的对象后就可以进行自由的操作了,我在程序中添加了2个按钮用来在页面中呈现两个不同的对象,完整代码如下:

代码

using System;
using System.IO;
using System.Windows;
using System.Windows.Markup;
using System.Windows.Resources;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
namespace WindowsPhoneLoadXAML
{
    public partial class MainPage : PhoneApplicationPage
    {
        Ellipse ellipse;
        Rectangle rectangle;
        // Constructor
        public MainPage()
        {
            InitializeComponent();
            ellipse = LoadXAMLAndGetShape("/WindowsPhoneLoadXAML;component/Ellipse.xaml");
            rectangle = LoadXAMLAndGetShape("/WindowsPhoneLoadXAML;component/Rectangle.xaml");
        }
        T LoadXAMLAndGetShape(string url)
        {
            string xaml = string.Empty;
            StreamResourceInfo sri = Application.GetResourceStream(new Uri(url, UriKind.Relative));
            using (StreamReader sr = new StreamReader(sri.Stream))
            {
                xaml = sr.ReadToEnd();
            }
            T shape = (T)XamlReader.Load(xaml);
            return shape;
        }
        private void btnEllipse_Click(object sender, RoutedEventArgs e)
        {
            if (ContentPanel.Children.Contains(rectangle))
            {
                this.ContentPanel.Children.Remove(rectangle);
            }
            if (ellipse != null && !ContentPanel.Children.Contains(ellipse))
            {
                this.ContentPanel.Children.Add(ellipse);
            }
        }
        private void btnRectangle_Click(object sender, RoutedEventArgs e)
        {
            if (ContentPanel.Children.Contains(ellipse))
            {
                this.ContentPanel.Children.Remove(ellipse);
            }
            if (rectangle != null && !ContentPanel.Children.Contains(rectangle))
            {
                this.ContentPanel.Children.Add(rectangle);
            }
        }
    }
}    下面是程序截图:
   DSC0002.jpg DSC0003.jpg
  四.下载示例代码:
  WindowsPhoneLoadXAML.zip
  如果大家喜欢我的文章,请点击“推荐”,谢谢!

运维网声明 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-64978-1-1.html 上篇帖子: Windows Phone 7 Tips (9) 下篇帖子: Windows 8 Developer Preview 完美与 Windows 7 共存法安装指南
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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