且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-05-07 10:41:56

1.只有切換頁面

2.加上頁面傳值的功能

第一部份:切換頁面

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

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

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

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

建立完成的結果

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

接著修改PageSwitcher.xaml.cs

silverlight 窗体切换 与 窗体之间传值的实现 public partial class PageSwitcher : UserControl
silverlight 窗体切换 与 窗体之间传值的实现    {
silverlight 窗体切换 与 窗体之间传值的实现        public 
PageSwitcher()
silverlight 窗体切换 与 窗体之间传值的实现        {
silverlight 窗体切换 与 窗体之间传值的实现
            InitializeComponent();
silverlight 窗体切换 与 窗体之间传值的实现
                //將一開始頁面指定為page UI
silverlight 窗体切换 与 窗体之间传值的实现                this
.Content = new Page();
silverlight 窗体切换 与 窗体之间传值的实现            
silverlight 窗体切换 与 窗体之间传值的实现
        }
silverlight 窗体切换 与 窗体之间传值的实现        //這裡是處理切換到下一頁的方法
silverlight 窗体切换 与 窗体之间传值的实现        public void 
Navigate(UserControl nextPage)
silverlight 窗体切换 与 窗体之间传值的实现        

silverlight 窗体切换 与 窗体之间传值的实现            this
.Content = nextPage;
silverlight 窗体切换 与 窗体之间传值的实现
        }
silverlight 窗体切换 与 窗体之间传值的实现
    }

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

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

<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程式碼如下

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

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

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

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

silverlight 窗体切换 与 窗体之间传值的实现public partial class Page2 : UserControl
silverlight 窗体切换 与 窗体之间传值的实现    {
silverlight 窗体切换 与 窗体之间传值的实现        public 
Page2()
silverlight 窗体切换 与 窗体之间传值的实现        {
silverlight 窗体切换 与 窗体之间传值的实现
            InitializeComponent();
silverlight 窗体切换 与 窗体之间传值的实现
            GotoPage1.Click += new RoutedEventHandler(GotoPage1_Click);
silverlight 窗体切换 与 窗体之间传值的实现
        }
silverlight 窗体切换 与 窗体之间传值的实现        //按下按鈕回第一頁
silverlight 窗体切换 与 窗体之间传值的实现        void 
GotoPage1_Click(object sender, RoutedEventArgs e)
silverlight 窗体切换 与 窗体之间传值的实现        {
silverlight 窗体切换 与 窗体之间传值的实现
            PageSwitcher ps = this.Parent as PageSwitcher;
silverlight 窗体切换 与 窗体之间传值的实现
            ps.Navigate(new Page());
silverlight 窗体切换 与 窗体之间传值的实现
silverlight 窗体切换 与 窗体之间传值的实现
        }
silverlight 窗体切换 与 窗体之间传值的实现
    }

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

silverlight 窗体切换 与 窗体之间传值的实现 public App()
silverlight 窗体切换 与 窗体之间传值的实现        {
silverlight 窗体切换 与 窗体之间传值的实现            this
.Startup += this.Application_Startup;
silverlight 窗体切换 与 窗体之间传值的实现            this
.Exit += this.Application_Exit;
silverlight 窗体切换 与 窗体之间传值的实现            this
.UnhandledException += this.Application_UnhandledException;
silverlight 窗体切换 与 窗体之间传值的实现
            InitializeComponent();
silverlight 窗体切换 与 窗体之间传值的实现
        }
silverlight 窗体切换 与 窗体之间传值的实现
        private void Application_Startup(object sender, StartupEventArgs e)
silverlight 窗体切换 与 窗体之间传值的实现        {
silverlight 窗体切换 与 窗体之间传值的实现            //只有修改這一段,主要應用程式UI改為PageSwitcher
silverlight 窗体切换 与 窗体之间传值的实现            this
.RootVisual = new PageSwitcher();
silverlight 窗体切换 与 窗体之间传值的实现
        }
silverlight 窗体切换 与 窗体之间传值的实现
        private void Application_Exit(object sender, EventArgs e)
silverlight 窗体切换 与 窗体之间传值的实现        {
silverlight 窗体切换 与 窗体之间传值的实现
silverlight 窗体切换 与 窗体之间传值的实现
        }

這樣第一階段就完成了

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

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

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

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

Switcher.cs

silverlight 窗体切换 与 窗体之间传值的实现public static class Switcher
silverlight 窗体切换 与 窗体之间传值的实现    {
silverlight 窗体切换 与 窗体之间传值的实现        public static 
PageSwitcher pageSwitcher;
silverlight 窗体切换 与 窗体之间传值的实现
        //只要切換頁面但不傳值
silverlight 窗体切换 与 窗体之间传值的实现        public static void 
Switch(UserControl newPage)
silverlight 窗体切换 与 窗体之间传值的实现        {
silverlight 窗体切换 与 窗体之间传值的实现
            pageSwitcher.Navigate(newPage);
silverlight 窗体切换 与 窗体之间传值的实现
        }
silverlight 窗体切换 与 窗体之间传值的实现        //切換頁面並且傳值
silverlight 窗体切换 与 窗体之间传值的实现        public static void 
Switch(UserControl newPage, object state)
silverlight 窗体切换 与 窗体之间传值的实现        {
silverlight 窗体切换 与 窗体之间传值的实现
            pageSwitcher.Navigate(newPage, state);
silverlight 窗体切换 与 窗体之间传值的实现
        }
silverlight 窗体切换 与 窗体之间传值的实现
    }

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

在 namespace 裡有這段code就可以

silverlight 窗体切换 与 窗体之间传值的实现    public interface ISwitchable
silverlight 窗体切换 与 窗体之间传值的实现    {
silverlight 窗体切换 与 窗体之间传值的实现        void 
UtilizeState(object state);
silverlight 窗体切换 与 窗体之间传值的实现
    }

再修改PageSwitcher.xml.cs

silverlight 窗体切换 与 窗体之间传值的实现public partial class PageSwitcher : UserControl
silverlight 窗体切换 与 窗体之间传值的实现    {
silverlight 窗体切换 与 窗体之间传值的实现        public 
PageSwitcher()
silverlight 窗体切换 与 窗体之间传值的实现        {
silverlight 窗体切换 与 窗体之间传值的实现
            InitializeComponent();
silverlight 窗体切换 与 窗体之间传值的实现
        }
silverlight 窗体切换 与 窗体之间传值的实现        //這裡是處理切換到下一頁的方法
silverlight 窗体切换 与 窗体之间传值的实现        public void 
Navigate(UserControl nextPage)
silverlight 窗体切换 与 窗体之间传值的实现        {
silverlight 窗体切换 与 窗体之间传值的实现            this
.Content = nextPage;
silverlight 窗体切换 与 窗体之间传值的实现
        }
silverlight 窗体切换 与 窗体之间传值的实现        //這是有傳值的
silverlight 窗体切换 与 窗体之间传值的实现        public void 
Navigate(UserControl nextPage, object state)
silverlight 窗体切换 与 窗体之间传值的实现        {
silverlight 窗体切换 与 窗体之间传值的实现          
silverlight 窗体切换 与 窗体之间传值的实现            this
.Content = nextPage;
silverlight 窗体切换 与 窗体之间传值的实现            //借由ISwitchable傳值
silverlight 窗体切换 与 窗体之间传值的实现
            ISwitchable s = nextPage as ISwitchable;
silverlight 窗体切换 与 窗体之间传值的实现
            s.UtilizeState(state);
silverlight 窗体切换 与 窗体之间传值的实现
        }
silverlight 窗体切换 与 窗体之间传值的实现
    }

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

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

<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

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

第二頁的版面Page2.xaml

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

<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

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

最後也是去修改

App.xaml.cs

silverlight 窗体切换 与 窗体之间传值的实现public App()
silverlight 窗体切换 与 窗体之间传值的实现        {
silverlight 窗体切换 与 窗体之间传值的实现            this
.Startup += this.Application_Startup;
silverlight 窗体切换 与 窗体之间传值的实现            this
.Exit += this.Application_Exit;
silverlight 窗体切换 与 窗体之间传值的实现            this
.UnhandledException += this.Application_UnhandledException;
silverlight 窗体切换 与 窗体之间传值的实现
            InitializeComponent();
silverlight 窗体切换 与 窗体之间传值的实现
        }
silverlight 窗体切换 与 窗体之间传值的实现
        private void Application_Startup(object sender, StartupEventArgs e)
silverlight 窗体切换 与 窗体之间传值的实现        {
silverlight 窗体切换 与 窗体之间传值的实现           
silverlight 窗体切换 与 窗体之间传值的实现
            PageSwitcher pageSwitcher = new PageSwitcher();
silverlight 窗体切换 与 窗体之间传值的实现            //主要應用程式UI為PageSwitcher
silverlight 窗体切换 与 窗体之间传值的实现            this
.RootVisual = pageSwitcher;
silverlight 窗体切换 与 窗体之间传值的实现            //把PageSwitcher傳給Switcher,並交由它切換頁面
silverlight 窗体切换 与 窗体之间传值的实现
            Switcher.pageSwitcher = pageSwitcher;
silverlight 窗体切换 与 窗体之间传值的实现
            Switcher.Switch(new Page());
silverlight 窗体切换 与 窗体之间传值的实现
        }
silverlight 窗体切换 与 窗体之间传值的实现
        private void Application_Exit(object sender, EventArgs e)
silverlight 窗体切换 与 窗体之间传值的实现        {
silverlight 窗体切换 与 窗体之间传值的实现
silverlight 窗体切换 与 窗体之间传值的实现
        }

 

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

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

 

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