如何在其它页面调用usercontrol

时间:2022-10-28 18:48:11
 UserControl rootPage = Application.Current.RootVisual as UserControl;
            Panel panel = VisualTreeHelper.GetChild(rootPage, 0) as Panel;
            if (mifo == null)
            {
                mifo = new UC_MeterInfo();
                mifo.Visibility = Visibility.Visible;
                panel.Children.Add(mifo);
            }
就是自己写了一个用户控件,现在在别的页面想调用出来,网上找的一些代码,测试上面的不行。

7 个解决方案

#1


调用自定义控件,分两种,

1. 静态调用

在Xaml头部声明自定义文件类库,然后在Xaml代码中声明自定义控件实例;

2. 动态调用

在后台代码中声明自定义控件对象实例,将自定义控件添加到视图树中。

详细请看:
http://silverlightchina.net/html/tips/2010/0818/1776.html


#2


同一个项目中。Usercontrol编译后,在控件的工具栏中也会找到这个自定义的控件。直接拖拽就行。

#3


动态编译??还是静态!

要是静态重新生成后直接在工具箱里面托到页面就行了


要是动态加载给你个代码:

 var PlugPath = DataBase.DataService.Instance.SystemUIConfig.Complaint.Path;
                Assembly assembly = Assembly.GetExecutingAssembly();

                Type[] TList = assembly.GetTypes();
                var ThisT = from p in TList where p.FullName == PlugPath select p;
                if (ThisT == null || ThisT.Count() == 0)
                {
                    MessageBox.Show("生成投诉单配置不正确");
                    return;
                }
                var control = System.Activator.CreateInstance(ThisT.First(), Id, MyParams);
                Plug = (IControl)control;
                Plug.SetValue(System.Windows.Controls.Grid.ColumnProperty, 0);
                Plug.SetValue(System.Windows.Controls.Grid.RowProperty, 0);
                LayoutRoot.Children.Add((UserControl)control);


上面这个是相当于应反射机制做的,也就是说你可以通过配置文件或者xml来配置你要动态加载的控件。你看下

你要动态添加的方式就是通过下面的 括号后面就行了

#4


当然是动态加载,我想让它像子窗体那样弹出来,但是用子窗体的样,不知道怎么修改界面的美观

#5


那就直接用子窗体嘛!页面的美观可以看看网上的例子!用Blend想怎么画都可以啊!

#6


子窗体那个标题怎么去掉啊,可以吗,那个标题好难看

#7


引用 5 楼  的回复:
那就直接用子窗体嘛!页面的美观可以看看网上的例子!用Blend想怎么画都可以啊!
子窗体那个标题怎么去掉啊,可以吗,那个标题好难看

#1


调用自定义控件,分两种,

1. 静态调用

在Xaml头部声明自定义文件类库,然后在Xaml代码中声明自定义控件实例;

2. 动态调用

在后台代码中声明自定义控件对象实例,将自定义控件添加到视图树中。

详细请看:
http://silverlightchina.net/html/tips/2010/0818/1776.html


#2


同一个项目中。Usercontrol编译后,在控件的工具栏中也会找到这个自定义的控件。直接拖拽就行。

#3


动态编译??还是静态!

要是静态重新生成后直接在工具箱里面托到页面就行了


要是动态加载给你个代码:

 var PlugPath = DataBase.DataService.Instance.SystemUIConfig.Complaint.Path;
                Assembly assembly = Assembly.GetExecutingAssembly();

                Type[] TList = assembly.GetTypes();
                var ThisT = from p in TList where p.FullName == PlugPath select p;
                if (ThisT == null || ThisT.Count() == 0)
                {
                    MessageBox.Show("生成投诉单配置不正确");
                    return;
                }
                var control = System.Activator.CreateInstance(ThisT.First(), Id, MyParams);
                Plug = (IControl)control;
                Plug.SetValue(System.Windows.Controls.Grid.ColumnProperty, 0);
                Plug.SetValue(System.Windows.Controls.Grid.RowProperty, 0);
                LayoutRoot.Children.Add((UserControl)control);


上面这个是相当于应反射机制做的,也就是说你可以通过配置文件或者xml来配置你要动态加载的控件。你看下

你要动态添加的方式就是通过下面的 括号后面就行了

#4


当然是动态加载,我想让它像子窗体那样弹出来,但是用子窗体的样,不知道怎么修改界面的美观

#5


那就直接用子窗体嘛!页面的美观可以看看网上的例子!用Blend想怎么画都可以啊!

#6


子窗体那个标题怎么去掉啊,可以吗,那个标题好难看

#7


引用 5 楼  的回复:
那就直接用子窗体嘛!页面的美观可以看看网上的例子!用Blend想怎么画都可以啊!
子窗体那个标题怎么去掉啊,可以吗,那个标题好难看