转载来自银光中国;
使用观察者模式在 Silverlight 中切换用户控件 时间:2010-10-18 08:06 来源:博客园 作者:jasmin 点击: 118次 有一篇技巧,见 http://tech.sina.com.cn/s/2008-07-03/1528718607.sHTML 或 http://kb.cnblogs.com/page/42897/?page=1 讨论的是运用InitParams在 Silverlight 2应用程序中切换用户控件,这是个很笨但是直观的解决方式。 但如果在控件中传值,那将怎么办?以上方法将毫无用途! 今天在一个老外的博客看到有个很巧妙的方法
有一篇技巧,见
http://tech.sina.com.cn/s/2008-07-03/1528718607.sHTML
或
http://kb.cnblogs.com/page/42897/?page=1
讨论的是运用InitParams在Silverlight 2应用程序中切换用户控件,这是个很笨但是直观的解决方式。
但如果在控件中传值,那将怎么办?以上方法将毫无用途!
今天在一个老外的博客看到有个很巧妙的方法,不敢独享,现分享出来:
首先写个接口:
1234567 | namespace PageSwitchSimple { public interface ISwitchable { voID UtilizeState( object state ); } } |
然后写个切换类:
1 2 3 4 5 6 7 8 910111213141516171819 | using System.windows.Controls;namespace PageSwitchSimple { public static class Switcher { public static PageSwitcher pageSwitcher; public static voID Switch( UserControl newPage ) { pageSwitcher.Navigate( newPage ); } public static voID Switch( UserControl newPage,object state ) { pageSwitcher.Navigate( newPage,state ); } } } |
PageSwitcher 成员类:
前台代码:
123456 | <UserControl x:Class="PageSwitchSimple.PageSwitcher" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" WIDth="800" Height="600"></UserControl> |
后台代码:
1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435 | using System; using System.windows.Controls;namespace PageSwitchSimple { public partial class PageSwitcher : UserControl { public PageSwitcher() { InitializeComponent(); } public voID Navigate( UserControl nextPage ) { this.Content = nextPage; } public voID Navigate( UserControl nextPage,object state ) { this.Content = nextPage; ISwitchable s = nextPage as ISwitchable; //这里真是太巧妙了,用于传object 参数! if ( s != null ) { s.UtilizeState( state ); } else { throw new ArgumentException( "nextPage is not ISwitchable! " + nextPage.name.ToString() ); } } } } |
然后写两个实现接口ISwitchable的用户控件:
控件一:
1 2 3 4 5 6 7 8 910 | <UserControl x:Class="PageSwitchSimple.Page" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" WIDth="400" Height="300"> <GrID x:name="LayoutRoot" Background="White"> <TextBlock Text="Your name: " FontSize="18" /> <TextBox x:name="name" FontSize="18" WIDth="150" Height="35" VerticalAlignment="top" margin="5"/> <button x:name="ChangePage" Content="Change" FontSize="18" WIDth="100" Height="50" /> </GrID> </UserControl> |
后台代码:
1 2 3 4 5 6 7 8 910111213141516171819 | using System.windows; using System.windows.Controls;namespace PageSwitchSimple { public partial class Page : UserControl,ISwitchable { public Page() { InitializeComponent(); ChangePage.Click += new RoutedEventHandler( ChangePage_Click ); } voID ChangePage_Click( object sender,RoutedEventArgs e ) { Switcher.Switch( new Page2(),name.Text ); } } } |
控件二:
123456789 | <UserControl x:Class="PageSwitchSimple.Page2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" WIDth="400" Height="300"> <GrID x:name="LayoutRoot" Background="Bisque"> <TextBlock x:name="Message" Text="Page2" FontSize="18" /> <button x:name="ChangePage" Content="Change" FontSize="18" WIDth="100" Height="50" /> </GrID> </UserControl> |
后台代码:
1 2 3 4 5 6 7 8 9101112131415161718192021222324 | using System.windows; using System.windows.Controls;namespace PageSwitchSimple { public partial class Page2 : UserControl,ISwitchable { public Page2() { InitializeComponent(); ChangePage.Click += new RoutedEventHandler( ChangePage_Click ); } public voID UtilizeState( object state ) { Message.Text = state.ToString(); } voID ChangePage_Click( object sender,RoutedEventArgs e ) { Switcher.Switch( new Page() ); } } } |
最后修改App.cs
1234567 | private voID Application_Startup( object sender,StartupEventArgs e ) { PageSwitcher pageSwitcher = new PageSwitcher(); this.RootVisual = pageSwitcher; Switcher.pageSwitcher = pageSwitcher; Switcher.Switch( new Page() ); } |
巧妙运用了观察者模式,佩服作者的思路
本文来自jasmin的博客,原文地址:http://www.cnblogs.com/jasmine_xm/archive/2010/10/18/1854401.HTML
总结以上是内存溢出为你收集整理的Silverlight窗体间传值全部内容,希望文章能够帮你解决Silverlight窗体间传值所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)