分享

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

 姬风 2012-06-23

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

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

复制代码
Code
using System.Windows;

namespace BookStore
{
    
public interface IContent
    {
        UIElement Content { 
getset; }
    }
}
复制代码

 

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

Test.Xaml完整内容如下:

复制代码
Code
<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完整内容如下:

复制代码
Code
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完整内容如下:

复制代码
Code
<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几乎一样)

复制代码
Code
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;
            }
        } 
    }
}
复制代码

 

运行效果图如下:


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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多