Silverlight2.0中使用多个xaml文件的解决方案.doc_第1页
Silverlight2.0中使用多个xaml文件的解决方案.doc_第2页
Silverlight2.0中使用多个xaml文件的解决方案.doc_第3页
Silverlight2.0中使用多个xaml文件的解决方案.doc_第4页
Silverlight2.0中使用多个xaml文件的解决方案.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Silverlight中多个Xaml之间的切换/调用/弹出/传参数问题小结(附实例源码)发布时间: 2009年09月10日 点击数: 14 文章来源:互联网 文章作者:未知 (实例代码) silverlight中不存在Flash中的场景,有的只是一个个Xaml文件,你要是愿意,也可以把它看做场景或窗口,刚开始接触sl时,对于多个xaml之间如何切换,调用,传递参数感到很棘手,下面是我总结的几种方法:1、A.xaml跳转到B.xaml(a)首先需要定义一个公用的接口(interface),如下:using System.Windows;namespace ChildWin.Code public interface IContent UIElement Content get; set; (b)A.Xaml与B.Xaml都实现该接口,代码如下:public partial class A: UserControl, IContent / / 实现IContent接口 / public new UIElement Content . get . return base.Content; set . base.Content = value; public partial class B: UserControl, IContent / / 实现IContent接口 / public new UIElement Content get return base.Content; set base.Content = value; (c)需要跳转的地方,类似下面这样处理:private void btnChange_Click(object sender, System.Windows.RoutedEventArgs e) (App.Current.RootVisual as IContent).Content = new Window2(); 上面的的意思是按钮btnChange点击后,当前场景将切换到Window2.xaml对应的场景2、主Xaml中加载子Xaml(类似软件中的MDI窗口)这个比较容易,在主Xaml中放置一个容器类的控件(比如ScrollViewer之类),然后指定Content就行了,参考以下代码:viewer1 Canvas.Top=40 Width=400 Height=258private void btnLoad_Click(object sender, System.Windows.RoutedEventArgs e) if (this.viewer1.Content = null) this.viewer1.Content = new SubWin(); 3、主Xaml中以模态窗口方式弹出子Xaml这个要用到sl3.0中的ChildWindow控件(a)项目中先添加System.Windows.Controls的引用(b)xaml文件头部加二行代码: xmlns:controls=clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls xmlns:vsm=clr-namespace:System.Windows;assembly=System.Windows (c)要弹出的地方,参考以下代码:private void btnShow_Click(object sender, System.Windows.RoutedEventArgs e) ChildWindow win = new ChildWindow(); win.Title = 测试弹出窗口; win.Content = new SubWin(); win.HasCloseButton = true; win.OverlayBrush = new SolidColorBrush(Colors.Gray); win.OverlayOpacity = 0.3; win.Width = 205; win.Height = 205; win.Show(); 4、调用Xaml时的参数传递问题可以利用构造函数来解决,参考以下代码namespace ChildWin public partial class SubWin : UserControl public SubWin() InitializeComponent(); public SubWin(DateTime dt):this() this.calendar1.DisplayDate = dt; 这里我添加了一个带参数的构架函数做为测试,即public SubWin(DateTime dt):this(),这里接受一个日期型的参数,然后把日期控件的显示值设置为该参数,而:this()的作用是调用该构架函数前,先调用无参数的构造函数,即SubWin(),这种写法在本例中等价于:public SubWin(DateTime dt) InitializeComponent(); this.calendar1.DisplayDate = dt; 重点:调用该Xaml时,上面都是xxx = new SubWin()来处理的,现在我们可以用this.viewer1.Content = new SubWin(DateTime.Parse(1979-6-5);来传递一个参数给SubWin本文来自:.Net中文社区() 详细出处参考:/HTML/162302845.htmlSilverlight中多个Xaml(场景? or 窗口? )之间的切换/调用/弹出/传参数问题小结2009-09-18 14:57silverlight中不存在Flash中的场景,有的只是一个个Xaml文件,你要是愿意,也可以把它看做场景或窗口,刚开始接触sl时,对于多个xaml之间如何切换,调用,传递参数感到很棘手,下面是我总结的几种方法:1、A.xaml跳转到B.xaml(a)首先需要定义一个公用的接口(interface),如下:using System.Windows;namespace ChildWin.Code public interface IContent UIElement Content get; set; (b)A.Xaml与B.Xaml都实现该接口,代码如下:public partial class A: UserControl, IContent / / 实现IContent接口 / public new UIElement Content get return base.Content; set base.Content = value; public partial class B: UserControl, IContent / / 实现IContent接口 / public new UIElement Content get return base.Content; set base.Content = value; (c)需要跳转的地方,类似下面这样处理:private void btnChange_Click(object sender, System.Windows.RoutedEventArgs e) (App.Current.RootVisual as IContent).Content = new Window2();上面的的意思是按钮btnChange点击后,当前场景将切换到Window2.xaml对应的场景2、主Xaml中加载子Xaml(类似软件中的MDI窗口)这个比较容易,在主Xaml中放置一个容器类的控件(比如ScrollViewer之类),然后指定Content就行了,参考以下代码:private void btnLoad_Click(object sender, System.Windows.RoutedEventArgs e) if (this.viewer1.Content = null) this.viewer1.Content = new SubWin(); 3、主Xaml中以模态窗口方式弹出子Xaml这个要用到sl3.0中的ChildWindow控件(a)项目中先添加System.Windows.Controls的引用(b)xaml文件头部加二行代码:xmlns:controls=clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls xmlns:vsm=clr-namespace:System.Windows;assembly=System.Windows(c)要弹出的地方,参考以下代码:private void btnShow_Click(object sender, System.Windows.RoutedEventArgs e) ChildWindow win = new ChildWindow(); win.Title = 测试弹出窗口; win.Content = new SubWin(); win.HasCloseButton = true; win.OverlayBrush = new SolidColorBrush(Colors.Gray); win.OverlayOpacity = 0.3; win.Width = 205; win.Height = 205; win.Show();4、调用Xaml时的参数传递问题可以利用构造函数来解决,参考以下代码namespace ChildWin public partial class SubWin : UserControl public SubWin() InitializeComponent(); public SubWin(DateTime dt):this() this.calendar1.DisplayDate = dt; 这里我添加了一个带参数的构架函数做为测试,即public SubWin(DateTime dt):this(),这里接受一个日期型的参数,然后把日期控件的显示值设置为该参数,而:this()的作用是调用该构架函数前,先调用无参数的构造函数,即SubWin(),这种写法在本例中等价于:public SubWin(DateTime dt) InitializeComponent(); this.calendar1.DisplayDate = dt;重点:调用该Xaml时,上面都是xxx = new SubWin()来处理的,现在我们可以用this.viewer1.Content = new SubWin(DateTime.Parse(1979-6-5);来传递一个参数给SubWin5月27日Silverlight2.0中使用多个xaml文件的解决方案我们在开发silverlight程序的时候,如果我们把所有的程序代码都放到Page.xaml和Page.xaml.cs中,必然会是Page.xaml文件过于庞大,查找代码的时候也会十分的不方便,那么我们就应该把处理每一个业务逻辑的代码分开,放到不同的xaml中。以下是本人总结Internet上部分相关资源并自己修改得出的一种解决方案,供大家参考,转载时请注明出处/1. 建立一个名为SilverlightApplicationXAML的解决方案,里面包含一个名为SilverlightApplicationXAML的Silverlight2.0的项目和一个名为SilverlightApplicationXAML_Web的Web应用程序项目。2. 在SilverlightApplicationXAML项目中添加新项,选择silverlight中的SilverlightUserControl(注意这里不是添加的SilverlightApplication),输入名称shenyang.xaml,再添加新项,同样的方法,命名为dalian.xaml,这样在Silverlight项目中就存在了三个xaml文件了,接下来要做的就是通过在Page.xaml中编写程序,控制事件触发后加载的xaml文件。3. 在shenyang.xaml中创建一个path图形,并增加一段动画(例如将这个path变大)为这个path起名为shenyang4. 同样的方法用于dalian.xaml中。5. 然后将shenyang.xaml和dalian.xaml中的path代码(不包括动画)复制并粘贴到Page.xaml文件中。注意这三个xaml文件的长和宽要一致。6. 这样,我们要实现的效果是当鼠标点击path时触发鼠标左键按下事件,通过Page.xaml.cs文件中的程序控制点击不同path后加载相应的xaml文件,并在加载完成后运行加载的xaml及其.xaml.cs文件的程序,从而达到将不同的业务逻辑分离以分别处理,使项目的逻辑性清晰。7. 鼠标点击path时触发private void ChooseArea(object sender, MouseButtonEventArgs e)方法。此方法的定义如下private void ChooseArea(object sender, MouseButtonEventArgs e) Path path1 = sender as Path; string pathName = path1.GetValue(NameProperty).ToString(); this.ChooseCityXaml(pathName); private void ChooseCityXaml(string chosenPathName) string typeName = string.Format(CultureInfo.InvariantCulture, SilverlightApplicationXAML.0, chosenPathName); Type type = typeof(Page).Assembly.GetType(typeName, false); if (type = null) ShowError(string.Format(CultureInfo.InvariantCulture, Failed to find 0!, typeName); return; try UIElement element = Activator.CreateInstance(type) as UIElement; LoadCityXaml(element); catch (Exception ex) ShowError(string.Format( CultureInfo.InvariantCulture, Failed to load 0! (1: 2), typeName, ex.GetType().Name, ex.Message); private void ShowError(string errorMessage) if (string.IsNullOrEmpty(errorMessage) errorMessage = Error!; LoadCityXaml(new Text

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论