none
页面加载的问题 RRS feed

  • 问题

  • page.xaml页面在最初的时候,加载了一个用户自定义控件user1.xaml,当在page.xaml触发一个事件以后,我想加载一个新的用户控件user2.xaml。
    我用LayoutRoot.Children.Remove(user1)和user1.Visibility = Visibility.Collapsed想清空这个控件,然后再加载新的控件user2.xaml,但是不起做用。
    补充一下,我的page.xaml页面还有别的用户控件,现在我就想把user1.xaml替换成user2.xaml,请问如何实现。谢谢!
    2009年7月5日 11:41

答案

全部回复

  •   试试下面的代码:

    string typeName = "";
                 typeName = string.Format(CultureInfo.InvariantCulture, "此处是你的解决方案的名称.{0}", "此处为你的xaml文件名");
                 Type type = typeof(Page).Assembly.GetType(typeName, false);
                 UIElement newElement = Activator.CreateInstance(type) as UIElement;
                 this.LayoutRoot.Children.Clear();
                 this.LayoutRoot.Children.Add(newElement);
    2009年7月5日 13:15
  • 你的user1要直接在LayoutRoot层下才能这样移除

    user1的父Panel.Children.Remove(user1);
    2009年7月6日 1:15
    版主
  • user1是在LayoutRoot层下的,加载的时候就是这么加载的。
    LayoutRoot.Children.Remove(user1);

    to SeekVerity:我的page页上还有其他的控件,如果this.LayoutRoot.Children.Clear();就把其他的控件也清除了。谢谢了。
    2009年7月6日 12:29
  • user1设全局变量
    2009年7月6日 15:31
    版主
  • 设置成全局变量也不好用啊,不知道什么地方出毛病了。
    2009年7月7日 14:56
  • 按照网上视频教程说的建立一个user控件
    using System.Windows.Controls;

    namespace Test
    {
        public partial class PageSwitcher : UserControl
        {
            public PageSwitcher()
            {
                InitializeComponent();
                if (this.Content == null)
                {
                    SwitchPage(new Page());
                }
            }

            /// <summary>
            ///
            /// </summary>
            /// <param name="newPage"></param>
            public void SwitchPage(UserControl newPage)
            {
                this.Content = newPage;
            }

        }
    }
    xaml文件
    <UserControl x:Class="Test.PageSwitcher"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows">
    </UserControl>

    app.xaml文件
    this.RootVisual = new PageSwitcher();

    在事件处理的那个部分
            private void ButtonLogin_Click(object sender, RoutedEventArgs e)
            {
                PageSwitcher ps = this.Parent as PageSwitcher;

                ps.SwitchPage(new Photo());
            }

    执行的时候报NullReferenceException,但是我在正常情况下,this.RootVisual = new Photo();是好用的,哪位高手能帮忙解决一下吗?

    2009年7月7日 15:07
  • 用这类控件,就不能直接跳转Xaml了,Page就是你的主Xaml框架,所有其他的UserControl都加在Page内
    2009年7月7日 15:24
    版主
  • 我式了其他方法都不好用的情况下我才用上面的方法的。
    版主,我的页面为什么不能换其他的控件,就如标题上所说的,需要注意什么地方吗?

    2009年7月8日 1:03
  • 问题解决。
    2009年7月8日 12:01