求教silverlight从一个xaml页面跳转到另一个页面的问题!

时间:2022-11-09 13:50:05
初学silverlight!
建成项目之后有个page页面,在这个页面中放一个按钮,点击之后想跳转到新建的一个Main.xaml页面去,怎么做?
在线等...

29 个解决方案

#1


用链接按钮试试,它有个属性是指向其他页面地址

#2


链接按钮?哪儿有?

#3


他说的是Hyperlinkerbutton, 但是这是用来连接到URL上的。
我想你要的是多个WINDOW中的切换。
可以操作root.child 。
root是Main Window中的根元素,可能是Grid or Canvas .
动态修改即可。

#4


this.content = new Page2()
不行吗?

#5


导航啊!
新建一个Silverlight navigation application项目,运行一下,然后看看代码就知道了。

#6


来学习学些了。。。看看了。。

#7


现在推荐使用Navigation功能。

#8


你是想跳到xaml还是想把那个xaml的场景调过来呢?

#9


啥时候的问题啊?估计不会结贴了。

#10


使用Navigate吧, 这样很方便的。

#11


<Navigate:frame/> 然后用<Hyperlinkerbutton target="" source="gsdg.xaml">就可以了。 

#12


哈哈 还可以这样  我试试去  谢谢楼上的朋友了

#13


推荐你看一下:
第一个:使用UserControl进行传值、页面导航
http://www.bbniu.com/forum/thread-389-1-1.html
第二个:使用Navigation系统中的Frame+Page进行传值、页面导航
http://www.bbniu.com/forum/thread-395-1-1.html
http://www.bbniu.com/forum/thread-406-1-1.html

#14


在 frame 里面的窗体A ,如何通过窗体A里的按钮来 跳转到 另一窗体????????

#15


我说的这个跳转前提条件是:两个*.xaml必须继承自UserControl类,比如要从Page1.xaml跳转到Page2.xaml中
如下:先在App.xaml的类中声明Grid rootGrid = new Grid();
再把这个Application_Startup方法改为
private void Application_Startup(object sender,StartupEventArgs e)
{
      this.RootVisual = rootGrid;
      rootGrid.Children.Add(new Page1());
}

再添加一个方法
public void RedirectTo(UserControl userControl)
{
   App app = (App)Application.Current;
    app.rootGrid.Children.Clear();
    app.rootGrid.Children.Add(userControl);
}

在Page1.xaml事件中写
App app = (App)Application.Current;
app.RedirectTo(new Page2(参数可有可无,关键是看Page2.xaml中的构造函数有无参数));

#16


我刚才试了一下如果Page1.xaml和Page2.xaml继承的是Page类,只要把App.xaml类中方法RedirectTo(Page page)后面类推。。。

#17


我说的这两种情况都是基于项目建的是“Silverlight应用程序”或“Silverlight导航应用程序”

#18


该回复于2010-11-26 13:11:32被版主删除

#19


用自带的Navigation

#20


引用 7 楼 jv9 的回复:
现在推荐使用Navigation功能。

怎么用啊,不会呢,能不能详细给下例子,就是点击登录按钮,登录成功后自动跳转到操作页面要如何实现呢

#21


引用 7 楼 jv9 的回复:
现在推荐使用Navigation功能。

跟着做还是出现了问题,NavigationService之后根本就感应不出来,请大家知道的帮忙解释下啦

#22


非常感谢janjinyezi

#23


我也是初学 Silverlight 路过学习了

#24


引用 7 楼 jv9 的回复:
现在推荐使用Navigation功能。


这个是控件么?

#25


来学习学习

#26


如果你的登陆界面是window窗体的话,子界面应该也用窗体,具体实现方法(假设跳转到Main.xaml):
在Button的Click事件中添加如下代码
Main win = new Main();
Main.Show();

如果你的登陆界面是Page页面的话,子界面应该也用页面才能导航到,具体方法:同样添加到Click事件中:
NavigationService.Navigate(new Uri("pack://application:,,,/Main.xaml"));

我也是反复实践才知道的。

#27


.先在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;
            }
        } 
    }
}


#28


在App.xaml中你可以新增一个方法:
   public void RedirectTo(UserControl userControl)
        {
            App app = (App)Application.Current;
            app.rootGrid.Children.Clear();
            app.rootGrid.Children.Add(userControl);
        }
在跳转按钮的点击事件中:
 App app = (App)Application.Current;
app.RedirectTo(new 跳转的页面(参数));

#29


showpage

#1


用链接按钮试试,它有个属性是指向其他页面地址

#2


链接按钮?哪儿有?

#3


他说的是Hyperlinkerbutton, 但是这是用来连接到URL上的。
我想你要的是多个WINDOW中的切换。
可以操作root.child 。
root是Main Window中的根元素,可能是Grid or Canvas .
动态修改即可。

#4


this.content = new Page2()
不行吗?

#5


导航啊!
新建一个Silverlight navigation application项目,运行一下,然后看看代码就知道了。

#6


来学习学些了。。。看看了。。

#7


现在推荐使用Navigation功能。

#8


你是想跳到xaml还是想把那个xaml的场景调过来呢?

#9


啥时候的问题啊?估计不会结贴了。

#10


使用Navigate吧, 这样很方便的。

#11


<Navigate:frame/> 然后用<Hyperlinkerbutton target="" source="gsdg.xaml">就可以了。 

#12


哈哈 还可以这样  我试试去  谢谢楼上的朋友了

#13


推荐你看一下:
第一个:使用UserControl进行传值、页面导航
http://www.bbniu.com/forum/thread-389-1-1.html
第二个:使用Navigation系统中的Frame+Page进行传值、页面导航
http://www.bbniu.com/forum/thread-395-1-1.html
http://www.bbniu.com/forum/thread-406-1-1.html

#14


在 frame 里面的窗体A ,如何通过窗体A里的按钮来 跳转到 另一窗体????????

#15


我说的这个跳转前提条件是:两个*.xaml必须继承自UserControl类,比如要从Page1.xaml跳转到Page2.xaml中
如下:先在App.xaml的类中声明Grid rootGrid = new Grid();
再把这个Application_Startup方法改为
private void Application_Startup(object sender,StartupEventArgs e)
{
      this.RootVisual = rootGrid;
      rootGrid.Children.Add(new Page1());
}

再添加一个方法
public void RedirectTo(UserControl userControl)
{
   App app = (App)Application.Current;
    app.rootGrid.Children.Clear();
    app.rootGrid.Children.Add(userControl);
}

在Page1.xaml事件中写
App app = (App)Application.Current;
app.RedirectTo(new Page2(参数可有可无,关键是看Page2.xaml中的构造函数有无参数));

#16


我刚才试了一下如果Page1.xaml和Page2.xaml继承的是Page类,只要把App.xaml类中方法RedirectTo(Page page)后面类推。。。

#17


我说的这两种情况都是基于项目建的是“Silverlight应用程序”或“Silverlight导航应用程序”

#18


该回复于2010-11-26 13:11:32被版主删除

#19


用自带的Navigation

#20


引用 7 楼 jv9 的回复:
现在推荐使用Navigation功能。

怎么用啊,不会呢,能不能详细给下例子,就是点击登录按钮,登录成功后自动跳转到操作页面要如何实现呢

#21


引用 7 楼 jv9 的回复:
现在推荐使用Navigation功能。

跟着做还是出现了问题,NavigationService之后根本就感应不出来,请大家知道的帮忙解释下啦

#22


非常感谢janjinyezi

#23


我也是初学 Silverlight 路过学习了

#24


引用 7 楼 jv9 的回复:
现在推荐使用Navigation功能。


这个是控件么?

#25


来学习学习

#26


如果你的登陆界面是window窗体的话,子界面应该也用窗体,具体实现方法(假设跳转到Main.xaml):
在Button的Click事件中添加如下代码
Main win = new Main();
Main.Show();

如果你的登陆界面是Page页面的话,子界面应该也用页面才能导航到,具体方法:同样添加到Click事件中:
NavigationService.Navigate(new Uri("pack://application:,,,/Main.xaml"));

我也是反复实践才知道的。

#27


.先在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;
            }
        } 
    }
}


#28


在App.xaml中你可以新增一个方法:
   public void RedirectTo(UserControl userControl)
        {
            App app = (App)Application.Current;
            app.rootGrid.Children.Clear();
            app.rootGrid.Children.Add(userControl);
        }
在跳转按钮的点击事件中:
 App app = (App)Application.Current;
app.RedirectTo(new 跳转的页面(参数));

#29


showpage