Silverlight窗体间传值

Silverlight窗体间传值,第1张

概述转载来自银光中国;   使用观察者模式在 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 讨论的是运用In

转载来自银光中国;

 

使用观察者模式在 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窗体间传值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1076784.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存