silverlight 窗体切换 与 窗体之间传值的实现

1.只有切換頁面

2.加上頁面傳值的功能

第一部份:切換頁面

同樣的先建立一個新的Silverlight專案

分別建立兩個User Control,並且名命為PageSwitcher、Page2

 

建立完成的結果

接著修改PageSwitcher.xaml.cs

 public partial class PageSwitcher : UserControl
    {
        public PageSwitcher()
        {
            InitializeComponent();

                //將一開始頁面指定為page UI
                this.Content = new Page();
            
        }
        //這裡是處理切換到下一頁的方法
        public void Navigate(UserControl nextPage)
        
            this.Content = nextPage;
        }
    }

然後現在要做第一頁設計頁的部分(Page.xaml)

 

<UserControl x:Class="SilverlightApplication2.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">
        <StackPanel VerticalAlignment="Center">
        <TextBlock FontSize="50" Text="這是第一頁" HorizontalAlignment="Center" />
        <Button x:Name="GotoPage2" FontSize="30" Width="300" Content="我想去第二頁"></Button>
        </StackPanel>
    </Grid>
</UserControl>

而Page.xaml.cs程式碼如下

public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
            GotoPage2.Click += new RoutedEventHandler(GotoPage2_Click);
        }
       //當按下"我想去第二頁"
        void GotoPage2_Click(object sender, RoutedEventArgs e)
        {
            //建立樹狀結構中的父物件
            PageSwitcher ps = this.Parent as PageSwitcher;
            //將UI置換成Page2
            ps.Navigate(new Page2());
        }
    }

然後是第二頁Page2的部份,基本上跟第一頁是一樣的

Page2.xaml

<UserControl x:Class="SilverlightApplication2.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="White">
        <StackPanel VerticalAlignment="Center">
            <TextBlock FontSize="50" Text="這是第二頁" HorizontalAlignment="Center" />
            <Button x:Name="GotoPage1" FontSize="30" Width="300" Content="我要回第一頁"></Button>
        </StackPanel>
    </Grid>
</UserControl>

Page2.xaml.cs

public partial class Page2 : UserControl
    {
        public Page2()
        {
            InitializeComponent();
            GotoPage1.Click += new RoutedEventHandler(GotoPage1_Click);
        }
        //按下按鈕回第一頁
        void GotoPage1_Click(object sender, RoutedEventArgs e)
        {
            PageSwitcher ps = this.Parent as PageSwitcher;
            ps.Navigate(new Page());

        }
    }

最後把App.xaml.cs修改一下

 public App()
        {
            this.Startup += this.Application_Startup;
            this.Exit += this.Application_Exit;
            this.UnhandledException += this.Application_UnhandledException;

            InitializeComponent();
        }

        private void Application_Startup(object sender, StartupEventArgs e)
        {
            //只有修改這一段,主要應用程式UI改為PageSwitcher
            this.RootVisual = new PageSwitcher();
        }

        private void Application_Exit(object sender, EventArgs e)
        {

        }

這樣第一階段就完成了

第二部份:加入頁面傳值功能

雖然上面已做完換頁動作,但很多情況必須傳遞參數才能達到你要的目的,但是相對來說就比較麻煩一點了

建立一個新的Class,命名為Switcher.cs、ISwitchable.cs

Switcher.cs

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);
        }
    }

ISwitchable.cs :這主要是要建立一個interface來共用並且傳值

在 namespace 裡有這段code就可以

    public interface ISwitchable
    {
        void UtilizeState(object state);
    }

再修改PageSwitcher.xml.cs

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傳值
            ISwitchable s = nextPage as ISwitchable;
            s.UtilizeState(state);
        }
    }

回去改第一頁的版面Page.xaml

 

<UserControl x:Class="SilverlightApplication2.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">
        <StackPanel VerticalAlignment="Center">
        <TextBlock FontSize="50" Text="這是第一頁" HorizontalAlignment="Center" />
            <TextBlock FontSize="30" Text="你的名字:" Foreground="Blue"HorizontalAlignment="Center" />
            <TextBox FontSize="30" Width="300" x:Name="YourName"></TextBox>
                <Button x:Name="GotoPage2" Margin="20" FontSize="30" Width="300"Content="我想去第二頁"></Button>
        </StackPanel>
    </Grid>
</UserControl>

Page.xaml.cs

 public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
            GotoPage2.Click += new RoutedEventHandler(GotoPage2_Click);
        }
       //當按下"我想去第二頁"
        void GotoPage2_Click(object sender, RoutedEventArgs e)
        {
            
            Switcher.Switch(new Page2(), YourName.Text);//這裡會加上要傳的值
        }
    }

第二頁的版面Page2.xaml

 

<UserControl x:Class="SilverlightApplication2.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="White">
        <StackPanel VerticalAlignment="Center">
            <TextBlock FontSize="50" Text="這是第二頁" HorizontalAlignment="Center" />
            <TextBlock FontSize="30" Text="我的名字是:" Foreground="Red"HorizontalAlignment="Center" />
            <TextBlock FontSize="30" x:Name="MyName" Foreground="Blue" HorizontalAlignment="Center" />
            <Button x:Name="GotoPage1" Margin="20" FontSize="30" Width="300"Content="我要回第一頁"></Button>
        </StackPanel>
    </Grid>
</UserControl>

 

Page2.xaml.cs

public partial class Page2 : UserControl, ISwitchable //要記得加上interface 才能繼承
    {
        public Page2()
        {
            InitializeComponent();
            GotoPage1.Click += new RoutedEventHandler(GotoPage1_Click);
        }
        //按下按鈕回第一頁
        void GotoPage1_Click(object sender, RoutedEventArgs e)
        {
            Switcher.Switch(new Page());
        }
        //這一段很重要,在繼承interface時要再實做出來
        public void UtilizeState(object state)
        {
            MyName.Text = state as string;
        }
    }

最後也是去修改

App.xaml.cs

public App()
        {
            this.Startup += this.Application_Startup;
            this.Exit += this.Application_Exit;
            this.UnhandledException += this.Application_UnhandledException;

            InitializeComponent();
        }

        private void Application_Startup(object sender, StartupEventArgs e)
        {
           
            PageSwitcher pageSwitcher = new PageSwitcher();
            //主要應用程式UI為PageSwitcher
            this.RootVisual = pageSwitcher;
            //把PageSwitcher傳給Switcher,並交由它切換頁面
            Switcher.pageSwitcher = pageSwitcher;
            Switcher.Switch(new Page());
        }

        private void Application_Exit(object sender, EventArgs e)
        {

        }

 

可以把PageSwitcher.xaml.cs再修改以方便除錯

public void Navigate(UserControl nextPage, object state)
        {
          
            this.Content = nextPage;
            //借由ISwitchable傳值
            ISwitchable s = nextPage as ISwitchable;
            if (s != null)
            {
                s.UtilizeState(state);
            }
            else
            {
                throw new ArgumentException("不具有傳遞值的頁面"
                  + nextPage.Name.ToString());
            }
        }

 

copyright http://www.dotblogs.com.tw/liuznsn/archive/2008/12/06/6276.aspx 

时间: 2024-11-16 06:49:39

silverlight 窗体切换 与 窗体之间传值的实现的相关文章

silverlight 窗体切换 与 窗体之间传值 的实现

1.只有切換頁面 2.加上頁面傳值的功能 第一部份:切換頁面 同樣的先建立一個新的Silverlight專案 分別建立兩個User Control,並且名命為PageSwitcher.Page2   建立完成的結果 接著修改PageSwitcher.xaml.cs  public partial class PageSwitcher : UserControl    {        public PageSwitcher()        {            InitializeComp

c#窗体-c#两个窗口之间传值,虽然简单,但我仍不会,请各位大神帮忙

问题描述 c#两个窗口之间传值,虽然简单,但我仍不会,请各位大神帮忙 在一个窗口的button按钮中点击,另一个窗口的checkbox被选中,该咋写 解决方案 http://bbs.csdn.net/topics/360140208 解决方案二: 另一个窗体添加一个属性 public bool IsSelected { get { return checkBox1.Checked; } set { checkBox1.Checked = value; } } 主窗体 (Application.O

Javascript showModalDialog两个窗体之间传值_javascript技巧

Javascript 两个窗体之间传值实现代码javascript中还有一个函数window.showModalDialog也可以打开一个新窗体,不过他打开的是一个模态窗口,那么如何在父窗体和子窗体之间传值呢?我们先看该函数的定义:vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures]) 参数说明: sURL--必选参数,类型:字符串.用来指定对话框要显示的文档的URL. vArguments--可选参数,类型

.net窗体之间传值几种方法详解

1.父窗体传值给子窗体 在父窗体中写: FormChild fc = new FormChil();//新建一个子窗体 fc.ShowDialog(this);//以上两句即实现了子窗体和父窗体的联系 textBox2.Text = fc.Str1;//已实现联系,可以传值 2.子窗体传值给父窗体 有两种方法:  (1) 在子窗体中写:      FormParent fp = (FormParent)this.Owner;//实现联系      textBox1.Text = fp.Str1;

asp.net Silverlight中的模式窗体_实用技巧

其实在Silverlight中开发模式窗体并不难,比在Html里面用div来构造容易多了,但是要做到具有重用性和规范性还是要下一点工夫的.如果SL的开发朋友们想偷一点懒,直接用些现成写好的模式窗体代码的话,我在这里介绍一个SL的框架,叫SilverlightFX,里面就有一个Form类,只要你的xaml类继承了Form类就可以很方便地使用模式窗体了.具体方面可以参照他的sample工程,这里给出SilverlightFX的连接给大家 http://projects.nikhilk.net/Sil

外行求教:vb.net MDI父窗体与子窗体之间的界线怎么隐藏

问题描述 外行求教:vb.net MDI父窗体与子窗体之间的界线怎么隐藏 外行求教:如图片,用vb2013写的,父窗体中点击不同按钮,显示不同子窗体.图中project按钮在父窗体,背景色为红色,位于一个panel中,panel的borderstyle已经设为none:子窗体的formborderstyle也已设为none,子窗体最上部为一个panel,背景色为红色.想达到的效果是父窗体中的按钮与子窗体最上部的panel看起来是一体的,但是现在两个中间有一道界线.求教怎么把这道线去掉?谢谢! 解

C# 系统应用之使用Pancel控件同一窗体切换页面

该文章是项目"个人电脑历史记录清除软件"的系列文章.主要讲述如何使用Pancel控件实现类似于360安全卫士的点击图标窗体不变,但页面内容变换的功能及遇到的重叠Panel不能设置Visible(可见)问题. 一.通过文档大纲查看层次关系 在使用panel控件时我遇到的一个问题是:当有多个panel(对控件集合分组)控件重叠显示时,在页面切换如下代码: private void pictureBox1_Click(object sender, EventArgs e) { panelIE

关于窗体切换问题,不new form()能打开其他窗体吗

问题描述 关于窗体切换问题,不new form()能打开其他窗体吗 请问高手,winform中form1中和form2中个有一个切换两个窗体的按钮和个一个textbox1文本框,我在form1中填好值以后打开form2,然后再从form2返回后,form1中文本框的值就没了,因为new了一个form1,同样的在form2中填好数据以后,再进来的时候这个值又没了,因为都新建了一个form,所以这样的应该怎么解决 解决方案 http://bbs.csdn.net/topics/360140208 另

jsp 网站开发-jsp子窗体向父窗体传值

问题描述 jsp子窗体向父窗体传值 function returninfo() { alert("Hello !!"); //获取用户输入的部门信息 var depinfo=document.myform.dep.value; //关键步骤.取得父窗体的document对象 alert(depinfo); <!---->var doc=window.opener.document;// 加上这段代码.子窗体就关闭不了.不加子窗体就能关闭. //将取得的信息赋值给上个页面的接