Silverlight中如何方便在多个"场景"即Xaml文件之间随意切换?

来源:转载

注:以下方法是百度上搜索得来的,整理一下转发于此

步骤1.先在silverlight项目中新建一个接口文件IContent.cs,内容如下(namespace请各位根据自己的实际情况修改):

using System.Windows;
namespace BookStore
{
    public interface IContent
    {
        UIElement Content { get; set; }
    }
}

 

步骤2.建二个Xaml文件Test.xaml和Test2.Xaml

Test.Xaml完整内容如下:

<UserControl x:Class="BookStore.Test"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="600" Height="400">
    <Grid x:Name="LayoutRoot" Background="White" >
        <StackPanel Orientation="Vertical" HorizontalAlignment="Center" Margin="50" Background="AliceBlue" Width="200" Height="100">
            <TextBlock TextAlignment="Center">
                这是Test.Xaml文件
            </TextBlock>
            <Button Height="25" Width="150" Content="转到Test2.xaml" Click="Button_Click"></Button>
        </StackPanel>
       
    </Grid>
</UserControl>

 

Test.Xaml.Cs完整内容如下:

using System.Windows;
using System.Windows.Controls;

namespace BookStore
{

    //手动增加, IContent ,让Test实现IContent接口
    public partial class Test : UserControl, IContent 
    {
        public Test()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            //实现切换(点击test.xaml上的按钮将切换到Test2"场景")
            (Application.Current.RootVisual as IContent).Content = new Test2();                       
        }


        /// <summary>
        /// 增加一个Content属性
        /// </summary>
        public new UIElement Content
        {
            get
            {
                return base.Content;
            }
            set
            {
                base.Content = value;
            }
        } 

    }
}

 

Test2.Xaml完整内容如下:

<UserControl x:Class="BookStore.Test2"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="600" Height="400">
    <Grid x:Name="LayoutRoot" Background="White" >
        <StackPanel Orientation="Vertical" HorizontalAlignment="Center" Margin="50" Background="Beige"  Width="200" Height="100">
            <TextBlock TextAlignment="Center">
                这是Test2.Xaml文件
            </TextBlock>
            <Button Height="25" Width="150" Content="转到Test.xaml" Click="Button_Click"></Button>
        </StackPanel>

    </Grid>
</UserControl>

 

Test2.Xaml.cs完整内容如下:(其实跟Test.Xaml.cs几乎一样)

using System.Windows;
using System.Windows.Controls;

namespace BookStore
{
    //手动增加, IContent ,让Test2实现IContent接口
    public partial class Test2 : UserControl, IContent
    {
        public Test2()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
        //就这一行有点一不样(点击test2.xaml上的按钮将还回到Test"场景")
            (Application.Current.RootVisual as IContent).Content = new Test();            
        }

        /// <summary>
        /// 增加一个Content属性
        /// </summary>
        public new UIElement Content
        {
            get
            {
                return base.Content;
            }
            set
            {
                base.Content = value;
            }
        } 
    }
}

 

运行效果图如下:

 

欢迎转载,但请注明来自"菩提树下的杨过"

本文来自菩提树下的杨过的博客,原文地址:http://www.cnblogs.com/yjmyzz/archive/2009/02/06/1385189.html


分享给朋友:
您可能感兴趣的文章:
随机阅读: